Es ist sicher eine interessante Frage. Die meisten Leute, die mit der Oracle-Entwicklung vertraut sind, würden sich keine Gedanken darüber machen, aber wenn Sie darauf zurückkommen, ist es manchmal verwirrend, die Abgrenzung zwischen SQL und PL / SQL zu definieren.
Wenn Sie sich die Definition der Akronyme ansehen, erhalten Sie eine Vorstellung davon, welche Funktionsbereiche jeweils abgedeckt sind:
SQL - Structured Query Language
PL / SQL - Prozedurale Sprache / Strukturierte Abfragesprache
Dem aufmerksamen Leser fällt möglicherweise auf, dass SQL zweimal angezeigt wird. 8) Dies liegt daran, dass SQL häufig in PL / SQL eingebettet ist - PL / SQL ist eine Sprache, die eine proprietäre Sprache der 4. Generation (4GL) bietet , die mit Datenbankobjekten in sehr gut funktioniert Orakel.
Wikipedia hat ziemlich gutes Material sowohl zu SQL als auch zu PL / SQL
Der verwirrende Teil ist, dass sich PL / SQL und SQL ein wenig überschneiden. SQL umfasst das Einfügen, Abfragen, Aktualisieren und Löschen von Daten, die so genannten DML- oder Datenbearbeitungs-Sprachoperationen, aber auch das Erstellen, Ändern, Umbenennen und Löschen von DDL- oder Datendefinitions-Sprachoperationen. Es ist hier, wo manche verwirrt werden könnten. Die Operation zum Erstellen einer gespeicherten Prozedur, die mit PL / SQL geschrieben wurde, ist eigentlich SQL. Sie verwenden SQL, um das Datenbankobjekt zu erstellen, das einen PL / SQL-Block darstellt.
Ebenso können Sie SQL-Code in PL / SQL einbetten. Eine FOR-Schleife in PL / SQL kann beispielsweise auf einer SQL-Abfrage basieren. Bläst dir ein bisschen den Verstand, was? Sie erstellen eine Prozedur mit SQL, die intern SQL verwendet, um bestimmte Aktionen für Datensätze aus der Datenbank auszuführen.
Coole Sachen, wenn du mich fragst.
v$sql
usw. verfolgenWenn es eingewickelt ist
BEGIN
...END
DECLARE
...END
CREATE OR REPLACE
...END
EXECUTE
Dann ist es PL / SQL. Was bedeutet das unter der Haube? SQL wird zu einem Abfrageplan "kompiliert" und ausgeführt, wobei sofort eine Ergebnismenge für den Fall
SELECT
oder die Anzahl der in anderen Fällen betroffenen Zeilen oder ein Fehler zurückgegeben wird. PL / SQL ist jedoch mehr beteiligt. Jedes Objekt, auf das verwiesen wird, wird auf Vorhandensein und erforderliche Berechtigungen überprüft. Anschließend wird PL / SQL in nahezu nativen Code kompiliert , der mit voller Geschwindigkeit ausgeführt wird. Die Abhängigkeiten werden nachverfolgt. Wenn sich eine Tabelle ändert, muss jede PL / SQL-Referenz, die darauf verweist, erneut kompiliert werden. Der Grund dafür ist Geschwindigkeit; Da zur Kompilierungszeit alles von vornherein erledigt wird, müssen in PL / SQL keine Laufzeitprüfungen durchgeführt werden, wohingegen SQL-Anweisungen jedes Mal überprüft werden müssen (auch wenn Abfragepläne zwischengespeichert werden, die sogenannte Soft-Analyse), Privilegien müssen noch geprüft werden, und selbst ein Soft-Parsing ist mit Kosten verbunden).Dies ist einer der "Killer-Vorteile" von gespeicherten Prozeduren, wie sie von Oracle ausgeführt werden. Das Ausführen eines in PL / SQL gespeicherten Prozesses oder Triggers führt zu einem absoluten Minimum an Berechnungen, um das Ergebnis zu erhalten. Anwendungscode, der außerhalb des nicht vertrauenswürdigen Oracle-Kernels ausgeführt wird, muss durch weitere Rahmen springen, um an die Daten zu gelangen. Dies ist das gleiche Argument für stark typisierte, referenziell transparente Hochsprachen wie OCaml oder Haskell. Führen Sie zur Kompilierungszeit mehrmals eine Arbeit aus und profitieren Sie von den Vorteilen, die sich aus der millionenfachen Ausführung des Codes ergeben.
quelle
SQL ist ein Standard *.
PL / SQL ist eine Herstellererweiterung des SQL-Standards *.
* SQL ist eine Sprache , die eine explizite Grammatik und Regeln dafür , wie die Grammatik implementiert werden soll, hat und ist
aber nichtein Standard -per-se.Daes jedoch eine Sprachspezifikation gibt, auf die sich alle einigen können, wäre alles, was in SQL geschrieben ist, portierbar, wenn das Programm nur in SQL geschrieben wäre.Da es sich bei PL / SQL jedoch um eine Herstellererweiterung handelt, enthält es Sprachteile, die andere Hersteller möglicherweise nicht unterstützen.
quelle