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:

  1. Gespeicherte Prozeduren erstellen .
  2. So erstellen Sie Datenbankauslöser.
  3. Implementierung einer clientseitigen Logik in Ihrer Oracle Forms-Anwendung.
  4. 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'))
);


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow