PL/SQL

PL/SQL
Paradigmen: prozedural
Erscheinungsjahr: 1991
Entwickler: Oracle
Aktuelle Version: 11.1  (2009)
Typisierung: stark, statisch, explizit
Wichtige Implementierungen: Oracle-Datenbank
Beeinflusst von: Ada, SQL
Lizenz: proprietär
Oracle Technology Network

PL/SQL (Procedural Language/Structured Query Language) ist eine proprietäre Programmiersprache der Firma Oracle.

PL/SQL verbindet die Abfragesprache SQL mit einer prozeduralen Programmiersprache. Die Syntax ist stark an die Programmiersprache Ada angelehnt.

Unterstützt werden Variablen, Bedingungen, Schleifen und Ausnahmebehandlungen. Ab Version 8 des Oracle-RDBMS halten auch objektorientierte Merkmale Einzug.

PL/SQL ist für das Arbeiten mit Oracle-Datenbanken ausgelegt. Insbesondere kann man im Quelltext SQL-Befehle nach dem Oracle-Standard einfügen. Dabei werden die SQL-Anweisungen nicht als Zeichenketten erzeugt und an eine Datenbankschnittstelle übergeben (wie z. B. bei ODBC, JDBC u. ä.), sondern fügen sich nahtlos in den Programmcode ein. Die Syntax kann damit bereits zum Zeitpunkt der Kompilierung überprüft werden.

Die prozedurale Erweiterung der SQL-Abfragesprache wird inzwischen auch von vielen anderen Datenbankherstellern implementiert. Daher wurde diese prozedurale SQL-Erweiterung inzwischen vom ANSI-Gremium standardisiert.

Verwendung

  • Man kann PL/SQL-Code wie SQL-Befehle über ein Datenbank-Frontend absetzen, der dann direkt abgearbeitet wird.
  • Man kann einzelne Unterprogramme (Stored Procedures) oder Bibliotheken mehrerer Unterprogramme (Stored Packages) als dauerhafte Datenbankobjekte auf dem Datenbankserver speichern und damit die Funktionalität der Datenbank erweitern; jeder Benutzer der Datenbank kann diese Unterprogramme aufrufen und nutzen. Die Berechtigungen können für jedes einzelne PL/SQL-Paket an einzelne Benutzer oder Benutzergruppen (sogenannte „Rollen“) vergeben werden.
  • Programmierung von Datenbanktriggern
  • Programmierung in diversen Tools (Oracle-Forms, Oracle-Reports)

PL/SQL-Programme können die Performance verbessern, wenn der Aufruf von einem Applikationsserver ausgeführt wird, der über eine langsame Netzwerkverbindung mit dem Datenbankserver verbunden ist. So muss in diesem Fall nur zu Beginn und am Ende der Ausführung eine Nachricht über das Netzwerk transportiert werden. Es gibt aber auch andere Möglichkeiten, bei einem langsamen Netzwerk die Performance einer Applikation zu verbessern. So kann z. B. die Oracle-Datenbank auch Java-Programme ausführen, die die Datenbank-Manipulationen vornehmen.

Grundlegender Aufbau

PL/SQL-Programme bestehen aus Blöcken:

  declare
      -- Deklarationsblock
  begin
     -- Ausführungsteil
  exception
     -- Ausnahmeverarbeitung
  end;

  /* So kommentiert man
  mehrzeilig */
  --So kommentiert man einzeilig

Variablendefinitionen

Variablen werden im (optionalen) Deklarationsabschnitt definiert und optional initialisiert.

  declare
      zahl1 number(2);
      zahl2 number(2) := 17;
      text varchar(20) := 'Das ist ein Text';
  begin
      select hausnummer into zahl1 from Adressverzeichnis where name='Meier' and rownum=1;
  end;

:= ist der Zuweisungsoperator, mit dem man einer Variable einen Wert zuweist.

Zahlenvariablen

  variablenname number(P[,S]) := Wert;

Um eine Zahlenvariable zu definieren, schreibt man zum Beispiel den Variablennamen, gefolgt vom Variablentyp NUMBER.

Hinter diesem schreibt man in runden Klammern die Genauigkeit P sowie optional ein Komma und die Anzahl an Nachkommastellen S.

Genauigkeit entspricht in diesem Fall der Anzahl an Stellen, welche die Variable enthalten kann, und nicht dem Wertebereich.

Auswahl weiterer Datentypen für Zahlenvariablen:

  dec, decimal, double precision, integer, int, numeric, real, smallint, binary_integer, pls_integer

Textvariablen

  variablenname varchar2(L) := 'Text';

Um eine Textvariable zu definieren, schreibt man den Variablennamen gefolgt vom Variablentyp VARCHAR2.

Der angehängte Längenconstraint (Integer in Klammern) gibt die maximale Länge der Variablen in Bytes an (sofern die Length Semantic nicht auf CHAR gestellt ist)

Auswahl weiterer Datentypen für Textvariablen:

CHAR, NCHAR, NVARCHAR2, CLOB, NCLOB

Die Datentypen LONG, LONG RAW und VARCHAR sind deprecated

Boolean

  variablenname boolean := true;

Kann TRUE, FALSE oder NULL sein.

Datum

   datum_1   date;
   datum_2   date := to_date('31.12.2016', 'DD.MM.YYYY');
   datum_3   date := to_date('31.12.2016 23:59:59', 'DD.MM.YYYY HH24:MI:SS');
   datum_4   date := date '2016-12-31 ';

Variablen vom Typ DATE enthalten Datum und Uhrzeit sekundengenau. Um eine Datumsvariable zu definieren schreibt man den Variablennamen gefolgt vom Variablentyp DATE. Die Funktion TO_DATE wandelt den Text zwischen den ersten Hochkommas in ein Datum mit dem angegebenen Format zwischen den zweiten Hochkommas um, wobei die Angabe einer Uhrzeit optional und der Default 00:00:00 Uhr ist. Ein Datum ohne Uhrzeitanteil kann ohne Konvertierung von Zeichenkette zu Datum mit einem Datumsliteral definiert werden; man schreibt dann das Schlüsselwort date, gefolgt von Datum im Format 'JJJJ-MM-TT'. Um ein Datum in einen Text zu konvertieren, gibt es die Funktion TO_CHAR(Datum). Neben dem Datentyp date gibt es noch den Datentyp timestamp, der eine größere Präzision hat. Hierzu gibt es weitere Subtypen: timestamp with time zone speichert die Zeitzone mit den Zeitinformationen, timestamp with local timezone konvertiert jeweils von der Zeitzone der Session in die lokale Zeitzone des Datenbankservers.

Datentyp über Spalte festlegen

  Variablenname Tabellenname.Spaltenname%type;

Definiert eine Variable des Typs der angegebenen Spalte.

Datentyp über Tabelle festlegen

  Variablenname Tabellenname%rowtype;

Definiert eine Variable für einen Datensatz/Row des Typs der angegebenen Tabelle.

Beispiel:

    CURSOR cursor_name IS
        SELECT *
        FROM tabelle;

    variable tabelle%rowtype;

    ...

    FOR i IN cursor_name LOOP
        variable := i;
        andere_variable := variable.SPALTENNAME;
    END LOOP;

Gültigkeitsbereich von Variablen

PL/SQL erlaubt es, Blöcke zu verschachteln. Variablen, die in äußeren Blöcken deklariert werden, sind in allen inneren Blöcken gültig. Variablen, die in inneren Blöcken deklariert werden, sind nicht in äußeren Blöcken gültig.

Je nachdem, wo Variablen deklariert werden, kann man zwischen zwei Arten unterscheiden.

  • Lokale Variablen - Diese werden in einem inneren Block deklariert. Von außen kann nicht darauf zugegriffen werden.
  • Globale Variablen - Diese werden in einem äußeren Block deklariert, und es kann von außen und innen darauf zugegriffen werden.

In folgendem Beispiel werden zwei Variablen deklariert, und die Summe derer wird in einem inneren Block einer dritten Variable zugewiesen. Auf die Variablen var_num1 und var_num2 kann von überall des Blocks aus zugegriffen werden. Auf die Variable var_result dagegen, welche im inneren Block deklariert wurde, kann von außerhalb nicht zugegriffen werden.

DECLARE
  var_num1 NUMBER;
  var_num2 NUMBER;
BEGIN
  var_num1 := 100;
  var_num2 := 200;
  DECLARE
    var_result NUMBER;
  BEGIN
    var_result := var_num1 + var_num2;
  END;
  /* Auf var_result kann hier nicht zugegriffen werden */
END;

Konstanten

Eine Konstante ist ein Wert in einem PL/SQL Block, der sich während des Programmablaufes nicht verändert.

DECLARE
  konstantenname CONSTANT NUMBER(3) := 10;

Die Wertzuweisung einer Konstante muss direkt bei der Deklaration erfolgen.

Benutzerdefinierte Datentypen

Benutzerdefinierte Datentypen werden definiert mit Hilfe von:

  type datentyp is record(feld1 typ1 [:=xyz], feld2 typ2 [:=xyz], ..., feldn typn [:=xyz]);

Beispiel:

  declare
    type t_adresse is record(
        hausname adresse.hausname%type,
        strasse adresse.strasse%type,
        hausnummer adresse.hausnummer%type,
        postleitzahl adresse.postleitzahl%type);
    v_adresse t_adresse;
  begin
    select hausname, strasse, hausnummer, postleitzahl into v_adresse from adresse where rownum = 1;
  end;

Das Beispielprogramm definiert einen eigenen Datentyp mit Namen t_adresse, welcher die Felder hausname, strasse, hausnummer und postleitzahl enthält.

Mit diesem Datentyp wird eine Variable v_adresse definiert, welche mit einem Datensatz aus der Tabelle adresse gefüllt wird.

Mittels Punktnotation kann auf die Attribute zurückgegriffen werden

  v_adresse.hausname := 'Nollenburgerweg 115';

Schleifen

Schleifen wiederholen die in ihrem Rumpf enthaltenen Anweisungen.

Loop-Schleife (Basisschleife)

  loop
    ...
    exit when BEDINGUNG;
  end loop;

Die loop-Schleife wiederholt die in ihrem Körper enthaltenen Anweisungen. Sie kann durch ein exit when gefolgt von einer Abbruchbedingung beendet werden.

Beachte: Auch wenn die Bedingung für das exit erfüllt ist, werden die Anweisungen, die im Schleifenkörper vor der exit-Anweisung stehen, mindestens einmal ausgeführt.

While-Schleife

  while Bedingung loop
    ...
  end loop;

Die while-Schleife wiederholt die in ihrem Körper enthaltenen Anweisungen, so lange die Bedingung in ihrem Kopf erfüllt ist.

Beachte: Sollte die Bedingung im Kopf nicht erfüllt sein, werden die Anweisungen im Schleifenkörper nie ausgeführt.

For-Schleife

  for v_counter in 1..10 loop
    ...
  end loop;

Die for-Schleife zählt eine Indexvariable von einem festgelegten Startwert bis zu einem festgelegten Endwert. Der kleinere Wert steht immer links, der größere immer rechts. Gibt man das Schlüsselwort REVERSE nach dem IN an, so wird vom größeren zum kleineren Wert heruntergezählt.

Beachte: Auch hierbei muss der kleinere Wert links und der größere Wert rechts stehen.

  begin
     for i in reverse 1 .. 5 loop
      dbms_output.put_line(to_char(i));
     end loop;
  end;
  5
  4
  3
  2
  1

Hinweis: Wenn Sie beim Arbeiten mit SQL*Plus die erwarteten Zahlen 5 bis 1 nicht sehen, müssen Sie vorher die Ausgabe einschalten.

  set serveroutput on

Cursor-For-Schleife

  for Record-Index in (Select Mitarbeiter_Nummer from Personaltabelle)
  loop
    ...
  end loop;

Die Cursor for-Schleife öffnet automatisch den Cursor, liest die Datensätze ein und schließt den Cursor wieder.

Alternativ dazu kann das SELECT-Statement des Cursors auch vorher definiert werden, um es mehrfach zu verwenden bzw. um die Darstellung übersichtlicher zu gestalten (besonders bei längeren/komplexeren Abfragen von Vorteil).

  cursor cursor_mitarbeiter is

  Select Mitarbeiter_Nummer from Personaltabelle;
  for Record-Index in cursor_mitarbeiter

  loop
    ...
  end loop;

Der Zugriff auf die Mitarbeiter-Nummer innerhalb der FOR-Schleife erfolgt mit dem Verbindungsoperator .:

  Record-Index.Mitarbeiter_Nummer

Bedingungen

Mit Hilfe von Bedingungen kann man auf verschiedene Situationen unterschiedlich reagieren.

IF-THEN-ELSE

  declare
    v_land welt.land%type;
  begin
    dbms_output.enable(20000);
    select land into v_land from welt
      where rownum = 1;
    if v_land = 39 then
        dbms_output.put_line('Land ist 39');
    elsif v_land = 49 then
        dbms_output.put_line('Land ist 49');
    else
        dbms_output.put_line('Land unbekannt');
    end if;
  end;

if prüft, ob eine Bedingung erfüllt ist. Ist die Bedingung erfüllt, wird der Code zwischen if und end if ausgeführt, ansonsten wird er übersprungen. Optional kann mit elsif eine weitere Bedingung mit zugehörigem Code angegeben werden, der ausgeführt wird, falls diese Bedingung erfüllt ist. Zu guter Letzt kann man ein allgemeines else angeben, dessen Code ausgeführt wird, wenn keine der vorangegangenen Bedingungen erfüllt waren.

Bedingungsstrukturen kann man zudem mittels des CASE-Statements ausdrücken.

CASE-WHEN

  DECLARE
    v_land welt.land%TYPE;
  BEGIN
    DBMS_OUTPUT.enable(20000);
    SELECT land INTO v_land FROM welt
      WHERE ROWNUM = 1;
    CASE WHEN v_land = 39 THEN DBMS_OUTPUT.put_line('Land ist 39');
         WHEN v_land = 49 THEN DBMS_OUTPUT.put_line('Land ist 49');
         WHEN v_land = 59 THEN DBMS_OUTPUT.put_line('Land ist 59');
                          ELSE DBMS_OUTPUT.put_line('Land unbekannt');
    END CASE;
  END;

Vereinfachte Form für reine Wertelisten:

  DECLARE
    v_land welt.land%TYPE;
  BEGIN
    DBMS_OUTPUT.enable(20000);
    SELECT land INTO v_land FROM welt
      WHERE ROWNUM = 1;
    CASE v_land
       WHEN 39 THEN DBMS_OUTPUT.put_line('Land ist 39');
       WHEN 49 THEN DBMS_OUTPUT.put_line('Land ist 49');
       WHEN 59 THEN DBMS_OUTPUT.put_line('Land ist 59');
               ELSE DBMS_OUTPUT.put_line('Land unbekannt');
    END CASE;
  END;

Exception-Handling

Es gibt zwei Arten von Exceptions:

  • vordefinierte Exceptions und
  • benutzerdefinierte Exceptions,

deren Handling analog ist.

Vordefinierte Exceptions

Exceptions werden automatisch von PL/SQL ausgelöst, wenn Fehler bei der Arbeit mit Datenbankobjekten (Tabellen, Views, Packages u. ä.) oder Programmierfehler (bspw. Division durch Null) bei der Abarbeitung des Programms auftreten. Es gibt in PL/SQL 20 Exceptions mit vordefinierten Namen. Jede Exception hat einen Fehlercode, der aus den Buchstaben ORA- und 5 Ziffern besteht. Typische Exceptions dieser Art sind

no_data_found (ORA-01403) – Eine SELECT-Anfrage liefert eine leere Datenmenge

too_many_rows (ORA-01422) – Eine SELECT-Anfrage liefert eine Datenmenge mit mehr als einem Satz, an einer Stelle, an der nur ein einzelner Satz als Ergebnis der Anfrage erwartet wurde.

Benutzerdefinierte Exceptions

Für die Behandlung logischer Programmfehler können eigene Exceptions in der Form

  <exception_name> exception;
  pragma exception_init(<exception_name>, -<exception_number>);

definiert und durch das Kommando

  raise <exception_name>;

ausgelöst werden.

Exceptionblock

Der Exceptionblock dient dazu, alle Exceptions des dazugehörigen Ausführungsteiles abzufangen. Es besteht damit die Möglichkeit, nach einer Exception eine individuelle Fehlerbehandlung anzuschließen. Zum einen kann der Fehler nach dem Abfangen behandelt werden, danach kann im Programm weitergearbeitet werden; zum anderen kann die Exception an den umschließenden Block weitergereicht werden. Falls die Exception bis zum äußersten Block propagiert wird und dort keine entsprechende Fehlerbehandlung definiert wurde, führt dies zu einem unkontrollierten Abbruch des Programms.

Der generelle Aufbau eines Exceptionblocks ist folgender:

  begin
     -- Programmcode der eine Exception auslösen kann
     Ausführungsteil
     ...
  exception
  when <exception_name_1> then
     -- Exceptionbehandlung für die Exception <exception_name_1>
     Ausführungsteil
  ...
  when <exception_name_n> then
     -- Exceptionbehandlung für die Exception <exception_name_n>
     Ausführungsteil
  when others then
    -- Exceptionbehandlung für alle restlichen, nicht erwarteten Exceptions
     Ausführungsteil
  end;

Der when others-Zweig ist optional; er fängt alle bis dahin im Exceptionblock nicht behandelten Exceptions ab. Fehlt dieser Zweig, werden unbehandelte Exceptions implizit an den umschließenden Block weitergereicht. Soll eine Exception explizit weitergereicht werden, muss der Ausführungsteil mit der Programmzeile raise <exception_name>; enden.

Vergleich mit T-SQL

PL/SQL ist trotz oberflächlicher Ähnlichkeiten grundsätzlich anders als Transact-SQL. Bei der Übernahme von Quellcode handelt es sich daher in der Regel um eine nicht ganz einfache Arbeit. Nicht nur auf Grund der Unterschiede in den Feature-Sets der beiden Sprachen,[1] sondern auch wegen der sehr deutlichen Unterschiede, wie Oracle und SQL Server mit der Steuerung der Parallelität und dem Locking umgehen. Es gibt jedoch Software-Tools, die die Übernahme erleichtern können, zum Beispiel Oracle Translation Scratch Editor[2] und SwisSQL.[3]

Vergleichbare Möglichkeiten der Programmierung mit anderen Datenbank-Management-Systemen

Wikibooks: PL/SQL – Lern- und Lehrmaterialien

Einzelnachweise

  1. vyaskn.tripod.com.
  2. Scratchlauncher Oracle Scratchlauncher.
  3. swissql.com.

Read other articles:

Chiesa di Santa SofiaLa chiesa, dalla Strada NovaStato Italia RegioneVeneto LocalitàVenezia Coordinate45°26′27.74″N 12°20′06.25″E / 45.44104°N 12.33507°E45.44104; 12.33507Coordinate: 45°26′27.74″N 12°20′06.25″E / 45.44104°N 12.33507°E45.44104; 12.33507 Religionecattolica TitolareSanta Sofia Patriarcato Venezia Stile architettonicoRomanico Inizio costruzione1020 Completamento1534 Modifica dati su Wikidata · Manuale La chiesa d...

 

Katedral Lama CoimbraKatedral Bunda Maria Diangkat ke SurgaPortugis: Sé Velha de Coimbracode: pt is deprecated Katedral Lama CoimbraLokasiCoimbraNegaraPortugalDenominasiGereja Katolik RomaArsitekturStatusKatedralStatus fungsionalAktifAdministrasiKeuskupanKeuskupan Coimbra Katedral Lama Coimbra (Portugis: Sé Velha de Coimbracode: pt is deprecated ) adalah sebuah gereja paroki Katolik yang terletak di Coimbra, Portugal. Pembangunan Gereja Sé Velha ini dimulai beberapa waktu setelah Pertempur...

 

Clarence ThomasClarence Thomas Hakim Agung Mahkamah Agung Amerika SerikatPetahanaMulai menjabat 23 Oktober 1991Dicalonkan olehGeorge H. W. Bush PendahuluThurgood MarshallPenggantimasih menjabat Informasi pribadiLahir23 Juni 1948 (umur 75)Pin Point, GeorgiaSuami/istriKate Ambush Thomas (cerai)Virginia Lamp ThomasAlma materCollege of the Holy Cross Universitas YaleSunting kotak info • L • B Clarence Thomas (lahir 23 Juni 1948) adalah yuris Amerika Serikat. Ia menjabat Hak...

Gelanggang Olahraga Haji Agus Salim Informasi stadionNama lengkapGelanggang Olah Raga Haji Agus SalimPemilikPemerintah Provinsi Sumatera Barat, tahun 2015 dipinjampakai kepada Pemerintah Kota PadangOperatorUPTD Pengelolaan GOR H. Agus Salim di bawah Dinas Pemuda dan Olahraga Kota Padang[1]LokasiLokasi Kota Padang, Sumatera BaratKonstruksiMulai pembangunan1983Dibuat1985Dibuka1985Direnovasi2010–2012ArsitekIsmet DarwisData teknisPermukaanRumputKapasitas28.000[2]Ukuran lapangan1...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018)   لمعانٍ أخرى، طالع قرية (توضيح). قرية البلد الولايات المتحدة  تعديل مصدري - تعديل   يختلف تعريف �...

 

Negara bagian di Sudan (lihat daftar) Saat ini, Sudan terbagi dalam 15 negara bagian. Sejarah Pada tahun 1991, Pemerintah Sudan mengubah struktur pembagian administratif dari provinsi (mudiriya) menjadi negara bagian federal. Pada 14 Februari 1994, struktur ini diubah kembali dengan pembentukan 26 negara bagian (wilayat). Pada tahun 2005, terbentuk Pemerintah Otonomi Sudan Selatan sehingga negara bagian Bahrul Jabal berubah nama menjadi Khatulistiwa Tengah. Pada bulan Agustus 2005, Kurdufan B...

Pour les articles homonymes, voir Master. Diplôme national de master Certification du ministère de l'Enseignement supérieur garantissant son contrôle et l'authenticité du diplôme. Lieu France Établissements Université Direction Ministère de l'Enseignement supérieur Taux de réussite 43 % pour l'année scolaire 2019-2020 Sélection Diplôme ou concours requis diplôme (Diplôme national de licence) Niveau ougrade requis niveau 6 RNCP/CEC Diplôme Durée de la formation 2 ans Di...

 

Karel ČapekLahir(1890-01-09)9 Januari 1890Malé Svatoňovice, Bohemia, Kerajaan Austria-Hungaria (sekarang Republik Ceko).Meninggal25 Desember 1938(1938-12-25) (umur 48)PekerjaanpenulisSuami/istriOlga ScheinpflugováTanda tangan Karel Čapek (pelafalan Ceko: [ˈkarɛl ˈtʃapɛk] simakⓘ; 9 Januari 1890 – 25 Desember 1938) adalah penulis Ceko pada abad ke-20. Biografi Lahir pada tahun 1890 di sebuah desa pegunungan di Bohemia, Malé Svatoňovice, dari seorang...

 

American manufacturer For the country music singer, see Curtis Wright. For the US government official, see Curtis Wright IV. This article is missing information about Dy4 Systems. Please expand the article to include this information. Further details may exist on the talk page. (October 2021) Curtiss-Wright CorporationCompany typePublicTraded asNYSE: CWS&P 400 ComponentIndustryAerospaceDefenseNuclear Power GenerationGeneral IndustrialPredecessorCurtiss Aeroplane and Motor CompanyWrig...

For other nor'easters that also impacted the continent in the same month, see February 2021 North American winter storm. January 31 – February 3, 2021 nor'easter GOES-16 satellite image of the nor'easter impacting the Northeastern United States at 18:00 UTC (1:00 p.m. EST) on February 1Meteorological historyFormedJanuary 25, 2021Exited landFebruary 3, 2021DissipatedFebruary 5, 2021Category 3 Major winter stormRegional Snowfall Index: 6.19 (NOAA)Highest winds65 mph (100...

 

Divisi Utama Liga IrlandiaNegara Republik Irlandia (dan satu tim dari Irlandia Utara)KonfederasiUEFADibentuk1985Jumlah tim10Tingkat pada piramida1Degradasi keDivisi Satu Liga IrlandiaPiala domestikPiala FAIPiala Liga IrlandiaPiala internasionalLiga ChampionsLiga EropaJuara bertahan ligaShamrock Rovers (gelar ke-8) (2023)Klub tersuksesShamrock Rovers (8 gelar)Dundalk (8 gelar)Televisi penyiarRTÉ 2Setanta SportsSitus webAirtricityLeague.ie Divisi Utama Liga Irlandia 2023 Divisi Utama Liga Irla...

 

Period of European history between AD 1350 and 1500 Europe and the Mediterranean region, c. 1354. From the Apocalypse in a Biblia Pauperum illuminated at Erfurt around the time of the Great Famine. Death sits astride a lion whose long tail ends in a ball of flame (Hell). Famine points to her hungry mouth. The late Middle Ages or late medieval period was the period of European history lasting from AD 1300 to 1500. The late Middle Ages followed the High Middle Ages and preceded the onset of the...

В Википедии есть статьи о других людях с такой фамилией, см. Васьковский. Евгений Владимирович Васьковскийпольск. Eugeniusz Włodzimierz Waśkowski Дата рождения 21 февраля (5 марта) 1866 Место рождения Аккерман, Бессарабская область, Российская империя Дата смерти 29 мая 1942(1942-05-29) (76 лет) Мес...

 

土库曼斯坦总统土库曼斯坦国徽土库曼斯坦总统旗現任谢尔达尔·别尔德穆哈梅多夫自2022年3月19日官邸阿什哈巴德总统府(Oguzkhan Presidential Palace)機關所在地阿什哈巴德任命者直接选举任期7年,可连选连任首任萨帕尔穆拉特·尼亚佐夫设立1991年10月27日 土库曼斯坦土库曼斯坦政府与政治 国家政府 土库曼斯坦宪法 国旗 国徽 国歌 立法機關(英语:National Council of Turkmenistan) ...

 

此條目需要补充更多来源。 (2021年7月4日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:美国众议院 — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 美國眾議院 United States House of Representatives第118届美国国会众议院徽章 众议院旗...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: The Globe song – news · newspapers · books · scholar · JSTOR (May 2016) (Learn how and when to remove this message) 1991 single by Big Audio Dynamite IIThe GlobeSingle by Big Audio Dynamite IIfrom the album The Globe ReleasedDecember 12, 1991Recorded1990/1...

 

اللغة الفريولية الاسم الذاتي (بfur: furlan)‏(بfur: lenghe furlane)‏    الناطقون 300000 (2002)  الكتابة إخطاطة لاتينية  النسب لغات هندية أوروبية لغات هندية أوروبيةلغات إيطاليقيةلغات رومانسيةاللغات الرومانسية الغربيةاللغات الغالية الإيبيريةاللغات الغالية الرومانسيةGallo-Rhaetian (en) Rhae...

 

Uka TjandrasasmitaLahirDr. Uka Tjandrasasmita(1930-10-08)8 Oktober 1930Kuningan, Jawa Barat, Hindia BelandaMeninggal22 Mei 2010(2010-05-22) (umur 79)Bogor, Jawa BaratKebangsaanIndonesia Dr. Uka Tjandrasasmita (8 Oktober 1930 – 22 Mei 2010) adalah seorang sejarawan dan ahli purbakala Indonesia.[1][2] Awal mula Uka Tjandrasasmita dilahirkan di Kuningan, Jawa Barat. Ia menempuh pendidikan SMP di Cirebon, SMA di Jakarta, dan kuliah di Fakultas Sastra Universi...

仮面ライダーシリーズ > 仮面ライダーフォーゼ 平成仮面ライダーシリーズ 第12作 仮面ライダーオーズ/OOO 2010年9月 - 2011年8月 第13作 仮面ライダーフォーゼ 2011年9月 - 2012年8月 第14作 仮面ライダーウィザード 2012年9月 - 2013年9月 仮面ライダーフォーゼジャンル 特撮テレビドラマ原作 石ノ森章太郎(石森章太郎プロ)脚本 中島かずき 他監督 坂本浩一 他出演者 福士�...

 

De revolutionibus orbium coelestium Edisi Nuremberg tahun 1543 asliPengarangNicolaus CopernicusBahasaLatinSubjekAstronomiPenerbitJohannes Petreius(Nuremberg)Tanggal terbit1543Halaman405 De revolutionibus orbium coelestium (listenⓘ; terjemahan Inggris: On the Revolutions of the Heavenly Spheres) adalah karya seminal tentang teori heliosentris dari astronom Nicolaus Copernicus (1473–1543) di Polandia pada zaman Renaisans. Buku tersebut pertama kali dicetak pada tahun 1543 di Nuremberg,...