plsql Tutorial
Erste Schritte mit plsql
Suche…
Bemerkungen
In diesem Abschnitt erhalten Sie einen Überblick darüber, was plsql ist und warum ein Entwickler es verwenden möchte.
Es sollte auch alle großen Themen in plsql erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für plsql neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.
Definition von PLSQL
PL / SQL (Prozedural Language / Structured Query Language) ist die prozedurale Erweiterung der Oracle Corporation für SQL und die relationale Datenbank von Oracle. PL / SQL ist in Oracle Database (seit Version 7), TimesTen-In-Memory-Datenbank (seit Version 11.2.1) und IBM DB2 (seit Version 9.7) verfügbar.
Die Basiseinheit in PL / SQL wird als Block bezeichnet, der aus drei Teilen besteht: einem deklarativen Teil, einem ausführbaren Teil und einem ausnahmebildenden Teil.
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
Deklarationen - Dieser Abschnitt beginnt mit dem Schlüsselwort DECLARE. Es ist ein optionaler Abschnitt, der alle Variablen, Cursor, Unterprogramme und anderen Elemente definiert, die im Programm verwendet werden sollen.
Ausführbare Befehle - Dieser Abschnitt ist zwischen den Schlüsselwörtern BEGIN und END eingeschlossen und ist ein obligatorischer Abschnitt. Es besteht aus den ausführbaren PL / SQL-Anweisungen des Programms. Es sollte mindestens eine ausführbare Codezeile enthalten, die nur ein NULL-Befehl sein kann, um anzuzeigen, dass nichts ausgeführt werden soll.
Ausnahmebehandlung - Dieser Abschnitt beginnt mit dem Schlüsselwort EXCEPTION. Dieser Abschnitt ist wiederum optional und enthält Ausnahmen, die Fehler im Programm behandeln.
Jede PL / SQL-Anweisung endet mit einem Semikolon (;). PL / SQL-Blöcke können mit BEGIN und END in andere PL / SQL-Blöcke geschachtelt werden.
In einem anonymen Block ist nur ein ausführbarer Teil des Blocks erforderlich, andere Teile sind nicht erforderlich. Nachfolgend finden Sie ein Beispiel für einfachen anonymen Code, der nichts anderes tut, als die Fehlerberichterstattung auszuführen.
BEGIN
NULL;
END;
/
Fehlende excecutable-Anweisungen führen zu einem Fehler, da PL / SQL keine leeren Blöcke unterstützt. Zum Beispiel führt die Ausführung des folgenden Codes zu einem Fehler:
BEGIN
END;
/
Anwendung wird Fehler auslösen:
END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge
Symbol "*" in Zeile unter dem Stichwort "END;" bedeutet, dass der Block, der mit diesem Block endet, leer oder falsch aufgebaut ist. Jeder Ausführungsblock benötigt Anweisungen, auch wenn er nichts tut, wie in unserem Beispiel.
Hallo Welt
set serveroutput on
DECLARE
message constant varchar2(32767):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
Der Befehlssatz set serveroutput on
ist in SQL * Plus- und SQL Developer-Clients erforderlich, um die Ausgabe von dbms_output
. Ohne den Befehl wird nichts angezeigt.
Das end;
Zeile signalisiert das Ende des anonymen PL / SQL-Blocks. Um den Code von der SQL-Befehlszeile aus auszuführen, müssen Sie möglicherweise /
am Anfang der ersten leeren Zeile nach der letzten Zeile des Codes eingeben. Wenn der obige Code an der SQL-Eingabeaufforderung ausgeführt wird, führt er zu folgendem Ergebnis:
Hello, World!
PL/SQL procedure successfully completed.
Über PLSQL
PL / SQL steht für Procedural Language-Erweiterungen für SQL. PL / SQL ist nur als "Technologie" in anderen Softwareprodukten verfügbar. Es existiert nicht als eigenständige Sprache. Sie können PL / SQL in der relationalen Oracle-Datenbank, im Oracle-Server und in clientseitigen Anwendungsentwicklungstools wie Oracle Forms verwenden. Hier einige Möglichkeiten, wie Sie PL / SQL verwenden könnten:
- Gespeicherte Prozeduren erstellen .
- So erstellen Sie Datenbankauslöser.
- Implementierung einer clientseitigen Logik in Ihrer Oracle Forms-Anwendung.
- So verknüpfen Sie eine Homepage im World Wide Web mit einer Oracle-Datenbank.
Differenz zwischen% TYPE und% ROWTYPE.
%TYPE
: Wird verwendet, um ein Feld mit demselben Typ wie der einer angegebenen Tabellenspalte zu deklarieren.
DECLARE
vEmployeeName Employee.Name%TYPE;
BEGIN
SELECT Name
INTO vEmployeeName
FROM Employee
WHERE RowNum = 1;
DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/
% ROWTYPE: Wird verwendet, um einen Datensatz mit denselben Typen zu deklarieren, die in der angegebenen Tabelle, Ansicht oder dem Cursor (= mehrere Spalten) gefunden werden.
DECLARE
rEmployee Employee%ROWTYPE;
BEGIN
rEmployee.Name := 'Matt';
rEmployee.Age := 31;
DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/
Ansicht erstellen oder ersetzen
In diesem Beispiel erstellen wir eine Ansicht.
Eine Ansicht wird meistens als einfache Methode zum Abrufen von Daten aus mehreren Tabellen verwendet.
Beispiel 1:
Ansicht mit einer Auswahl auf einem Tisch.
CREATE OR REPLACE VIEW LessonView AS
SELECT L.*
FROM Lesson L;
Beispiel 2
Ansicht mit Auswahl auf mehreren Tabellen.
CREATE OR REPLACE VIEW ClassRoomLessonView AS
SELECT C.Id,
C.Name,
L.Subject,
L.Teacher
FROM ClassRoom C,
Lesson L
WHERE C.Id = L.ClassRoomId;
Um diese Ansichten in einer Abfrage aufzurufen, können Sie eine select-Anweisung verwenden.
SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;
Erstellen Sie eine Tabelle
Im Folgenden erstellen wir eine Tabelle mit 3 Spalten.
Die Spalte Id
muss ausgefüllt werden, also definieren wir sie NOT NULL
.
In der Spalte Contract
fügen wir außerdem eine Prüfung hinzu, so dass der einzig zulässige Wert 'Y' oder 'N' ist. Wenn eine Einfügung in erledigt ist und diese Spalte während der Einfügung nicht angegeben wurde, wird standardmäßig ein 'N' eingefügt.
CREATE TABLE Employee (
Id NUMBER NOT NULL,
Name VARCHAR2(60),
Contract CHAR DEFAULT 'N' NOT NULL,
---
CONSTRAINT p_Id PRIMARY KEY(Id),
CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);