pl/sql - einführung - imn.htwk-leipzig.dekudrass/lehrmaterial/db1-vl/pdf/09-pl-s… · prof. dr....
TRANSCRIPT
![Page 1: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/1.jpg)
Prof. Dr. T. Kudraß 1
PL/SQL - Einführung
![Page 2: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/2.jpg)
Prof. Dr. T. Kudraß 2
Vorteile von PL/SQL
Application Other DBMSs
Application Oracle with
PL/SQL
SQL
SQL
SQL
SQL
SQL IF...THEN SQL ELSE SQL END IF; SQL
Enge Integration
mit SQL
Höhere
Performance
Bessere
Sicherheit
Nutzung vordefi-
nierter Packages
Unterstützung von
OO Programmierung
Höhere
Produktivität
![Page 3: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/3.jpg)
Prof. Dr. T. Kudraß 3
PL/SQL Blockstruktur
• DECLARE – Optional
– Variable, Cursor,
User-defined Exceptions
(Ausnahmen)
• BEGIN – Mandatory
– SQL Statements
– PL/SQL Statements
• EXCEPTION – Optional
– Aktionen, die im Fehlerfall
auszuführen sind
• END; – Mandatory
DECLARE
v_variable VARCHAR2(5);
BEGIN
SELECT column_name
INTO v_variable
FROM table_name;
EXCEPTION
WHEN exception_name THEN
...
END;
![Page 4: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/4.jpg)
Prof. Dr. T. Kudraß 4
Blocktypen
Anonymous Procedure Function
[DECLARE]
BEGIN
--statements
[EXCEPTION]
END;
PROCEDURE name
IS
BEGIN
--statements
[EXCEPTION]
END;
FUNCTION name
RETURN datatype
IS
BEGIN
--statements
RETURN value;
[EXCEPTION]
END;
![Page 5: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/5.jpg)
Prof. Dr. T. Kudraß 5
Programmkonstrukte
Anonymous
block
Application
trigger
Stored
procedure/
function
Database
trigger
Application
procedure/
function
Packaged
procedure/
function
DECLARE
BEGIN
EXCEPTION
END;
![Page 6: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/6.jpg)
Prof. Dr. T. Kudraß 6
Variablen in PL/SQL
• Behandlung von Variablen
– Deklarieren und initialisieren in der Declaration Section.
– Zuweisung neuer Werte an Variable in der Executable Section.
– Durchreichen von Werten in PL/SQL Blöcke durch Parameter.
– Anzeige von Ergebnissen durch Ausgabe-Variable.
• Variablen-Typen
– PL/SQL Variable
Skalar
Composite (Zusammengesetzt)
Reference
LOB (large objects)
– Non-PL/SQL Variables
– Bind und Host-Variable
![Page 7: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/7.jpg)
Prof. Dr. T. Kudraß 7
Deklaration von PL/SQL-Variablen
Syntax
identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];
DECLARE
v_hiredate DATE;
v_deptno NUMBER(2) NOT NULL := 10;
v_location VARCHAR2(13) := 'Atlanta';
c_comm CONSTANT NUMBER := 1400;
![Page 8: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/8.jpg)
Prof. Dr. T. Kudraß 8
Wertzuweisungen an Variable
v_ename := 'Maduro';
v_hiredate := '31-DEC-98';
Syntax
Beispiele:
Setze ein vordefiniertes Einstellungsdatum für neue Angestellte.
Setze den Angestellten-Namen auf “Maduro.”
identifier := expr;
![Page 9: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/9.jpg)
Prof. Dr. T. Kudraß 9
Skalare Basisdatentypen
– VARCHAR2 (maximum_length)
– NUMBER [(precision, scale)]
– DATE, TIMESTAMP, INTERVAL
– CHAR [(maximum_length)]
– LONG (jetzt: CLOB)
– LONG RAW (jetzt: BLOB)
– BOOLEAN
– BINARY_INTEGER / PLS_INTEGER
v_job VARCHAR2(9);
v_count BINARY_INTEGER := 0;
v_total_sal NUMBER(9,2) := 0;
v_orderdate DATE := SYSDATE + 7;
c_tax_rate CONSTANT NUMBER(3,2) := 8.25;
v_valid BOOLEAN NOT NULL := TRUE;
Skalare Variablendeklarationen (Beispiele):
![Page 10: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/10.jpg)
Prof. Dr. T. Kudraß 10
%TYPE Attribut
• Deklariere eine Variable entsprechend
– einer Tabellenspalten-Definition
– einer anderen bereits deklarierten Variablen
• Präfix %TYPE mit:
– DB-Tabelle und Spalte
– Name der vorher deklarierten Variablen
...
v_ename emp.ename%TYPE;
v_balance NUMBER(7,2);
v_min_balance v_balance%TYPE := 10;
...
Beispiele
![Page 11: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/11.jpg)
Prof. Dr. T. Kudraß 11
Referenzieren von Nicht-PL/SQL-Variablen
Speichere das Jahresgehalt in einer SQL*Plus Host-Variablen.
– Referenziere Nicht-PL/SQL Variable als Host-Variable.
– Referenzen erhalten als Präfix Doppelpunkt (:).
:g_monthly_sal := v_sal * 12;
Nutzung von Bind Variablen bei Dynamic SQL Statements
– In WHERE und VALUES-Klauseln dynamischer SQL-Befehle
– USING-Klausel definiert korrespondierende PL/SQL-Variable
– Anwendung des Prinzips bei Entwicklungstools wie APEX
'DELETE FROM employees WHERE employee_id = :id'
USING emp_id;
![Page 12: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/12.jpg)
Prof. Dr. T. Kudraß 12
Datentyp-Konvertierung
– Konvertiere Daten in vergleichbare Datentypen
– Gemischte Datentypen können zu Fehlern führen
– Vermeide implizite Konvertierung (langsamer, evtl.
anderes Ergebnis in künftigen Releases)
– Explizite Konvertieurng mittels Konvertierungs-
funktionen: TO_CHAR
TO_DATE
TO_NUMBER
DECLARE
v_date VARCHAR2(15);
BEGIN
SELECT TO_CHAR(hiredate, 'MON. DD, YYYY')
INTO v_date
FROM emp
WHERE empno = 7839;
END;
![Page 13: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/13.jpg)
Prof. Dr. T. Kudraß 13
PL/SQL Collections
• assoziative Arrays (index-by tables)
– PL/SQL TABLE Typ
– Elementzugriff über Position oder Suche nach Strings über
Indexwert
– Vergleichbar mit Hash-Tabellen in anderen Programmiersprachen
• Nested Tables
– Beliebige Anzahl von Elementen
– Nutzung der äquivalenten SQL-Typen, somit Speicherung in
Datenbanktabellen und Zugriff mittels SQL
• Varrays (variable-size arrays)
– feste Anzahl von Elementen (Obergrenze kann erhöht werden)
– Nutzung der äquivalenten SQL-Typen, somit Speicherung in DB-
Tabellen und Verarbeitung mittels SQL (weniger flexibel als nested
tables)
• Schachtelung von Collections möglich (somit auch
mehrdimensionale Arrays)
![Page 14: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/14.jpg)
Prof. Dr. T. Kudraß 14
PL/SQL Records
• enthalten eine oder mehrere Komponenten: Skalar,
RECORD, oder PL/SQL TABLE Datentyp (genannt: Felder)
• Sammlung von Feldern als logische Einheit behandelt
• ähnlich wie Records in Programmiersprachen (z.B. Pascal)
• nicht das gleiche wie Zeilen einer DB-Tabelle
• bequem zum Lesen einer Datenzeile aus Tabelle zur
Verarbeitung
![Page 15: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/15.jpg)
Prof. Dr. T. Kudraß 15
Erzeugen eines PL/SQL-Record
Syntax
• field_declaration ist definiert als:
TYPE type_name IS RECORD
(field_declaration[, field_declaration]…);
identifier type_name;
field_name {field_type | variable%TYPE
| table.column%TYPE | table%ROWTYPE}
[[NOT NULL] {:= | DEFAULT} expr]
Beispiel: Deklariere Variable, um Name, Job und Gehalt eines
neuen Angestellten zu speichern ...
TYPE emp_record_type IS RECORD
(ename VARCHAR2(10),
job VARCHAR2(9),
sal NUMBER(7,2));
emp_record emp_record_type;
![Page 16: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/16.jpg)
Prof. Dr. T. Kudraß 16
%ROWTYPE Attribut
• Deklariere Variable entsprechend einer Menge von Spalten einer
DB-Tabelle oder Sicht.
• Präfix %ROWTYPE mit DB-Tabelle.
• Felder im Record übernehmen Namen und Datentyp von den
Spalten aus Tabelle oder Sicht
• Vorteile: Nummer und Datentyp der Spalten können sich zur
Laufzeit ändern
• Nützlich für Lesen einer Zeile mit SELECT
Beispiel: Deklariere Variable, die die gleiche Information über
Abteilungen und Angestellte speichert wie die zugehörige
DEPT und EMP Tabelle.
dept_record dept%ROWTYPE; emp_record emp%ROWTYPE;
![Page 17: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/17.jpg)
Prof. Dr. T. Kudraß 17
Erzeugen einer PL/SQL Table
Syntax TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
[INDEX BY BINARY_INTEGER];
identifier type_name;
...
TYPE ename_table_type IS TABLE OF emp.ename%TYPE
INDEX BY BINARY_INTEGER;
ename_table ename_table_type;
...
Deklariere eine PL/SQL Variable, um einen Namen zu speichern.
Beispiel
![Page 18: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/18.jpg)
Prof. Dr. T. Kudraß 18
PL/SQL Block - Syntax
• Identifier
– können bis zu 30 Zeichen enthalten
– dürfen keine Schlüsselwörter enthalten
– müssen mit Buchstaben beginnen
– sollten nicht gleichen Namen wie DB-Tabelle haben
• Literale
– Zeichen und Datums-Literale müssen in einfachen
Hochkommas eingeschlossen sein
– auch numerische Literale möglich
• Kommentare
– Einzelzeile: --
– mehrere Zeilen: Kommentar zwischen /* und */
![Page 19: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/19.jpg)
Prof. Dr. T. Kudraß 19
Geschachtelte Blöcke und Variablen-Scope
...
x BINARY_INTEGER;
BEGIN
...
DECLARE
y NUMBER;
BEGIN
...
END;
...
END;
Scope von x
Scope von y
Beispiel
![Page 20: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/20.jpg)
Prof. Dr. T. Kudraß 20
SQL-Befehle in PL/SQL
• Extrahiere eine Datenzeile aus der Datenbank mittels
SELECT Befehl. Nur eine einfache Menge von Werten
kann zurückgeliefert werden.
• Mache Änderungen an Zeilen in der Datenbank mittels
DML-Befehlen.
• Kontrolliere eine Transaktion mittels COMMIT,
ROLLBACK, oder SAVEPOINT Kommando.
• Bestimme DML Ergebnis mit impliziten Cursorn.
![Page 21: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/21.jpg)
Prof. Dr. T. Kudraß 21
SELECT Befehle in PL/SQL
Lesen von Daten aus der Datenbank mit SELECT SELECT select_list
INTO {variable_name[, variable_name]...
| record_name}
FROM table
WHERE condition;
Beispiel: Lese Bestell- und Lieferdatum für eine bestimmte
Bestellung (INTO) DECLARE
v_orderdate ord.orderdate%TYPE;
v_shipdate ord.shipdate%TYPE;
BEGIN
SELECT orderdate, shipdate
INTO v_orderdate, v_shipdate
FROM ord
WHERE id = 620;
...
END;
![Page 22: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/22.jpg)
Prof. Dr. T. Kudraß 22
Ändern von Daten
Beispiel:
Erhöhe das Gehalt aller Angestellten in der Tabelle
EMP, die Analysten sind.
DECLARE
v_sal_increase emp.sal%TYPE := 2000;
BEGIN
UPDATE emp
SET sal = sal + v_sal_increase
WHERE job = 'ANALYST';
END;
INSERT und DELETE funktionieren analog
![Page 23: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/23.jpg)
Prof. Dr. T. Kudraß 23
Transaktionsverarbeitung in PL/SQL
– Beginne eine Transaktion mit dem ersten DML
Befehl, der einem COMMIT oder ROLLBACK Befehl
folgt (implizites BOT)
– Blockstruktur (BEGIN-END) Transaktionsstruktur
– COMMIT: beendet explizit Transaktion, macht
Änderungen dauerhaft und nach außen sichtbar
– ROLLBACK: beendet explizit Transaktion, macht alle
Änderungen rückgängig
– SAVEPOINT: Markierung innerhalb einer Transaktion
zum teilweisen Zurückrollen der Transaktion: ROLLBACK TO Savepoint
![Page 24: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/24.jpg)
Prof. Dr. T. Kudraß 24
SQL-Attribute
Mit SQL-Attributen kann das Ergebnis eines
SQL-Befehls getestet werden.
SQL%ROWCOUNT Anzahl Zeilen, die vom letzten SQL- Befehl betroffen ist
SQL%FOUND Boolesches Attribut, ist gleich TRUE, wenn der letzte SQL-Befehl mehr als eine Zeile betrifft
SQL%NOTFOUND Boolesches Attribut, ist gleich TRUE, wenn der letzte SQL-Befehl überhaupt keine Zeile betrifft
SQL%ISOPEN FALSE, weil PL/SQL implizite Cursor unmittelbar nach Ausführung schließt
![Page 25: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/25.jpg)
Prof. Dr. T. Kudraß 25
IF-Anweisungen
IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;
Beispiel: Setze die Manager-ID auf 22, wenn der Angestellten-Name Osborne ist.
IF v_ename = 'OSBORNE' THEN
v_mgr := 22;
END IF;
Syntax
![Page 26: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/26.jpg)
Prof. Dr. T. Kudraß 26
IF-THEN-ELSIF Anweisungen
Für einen gegebenen Wert, berechne einen
Prozentanteil dieses Wertes basierend auf
einer Bedingung.
Beispiel: . . .
IF v_start > 100 THEN
v_start := 2 * v_start;
ELSIF v_start >= 50 THEN
v_start := .5 * v_start;
ELSE
v_start := .1 * v_start;
END IF;
. . .
![Page 27: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/27.jpg)
Prof. Dr. T. Kudraß 27
Einfache Schleife
Syntax
LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;
Condition: Boolean variable | expression (TRUE, FALSE, NULL)
-- delimiter
-- statements
-- EXIT statement
-- delimiter
DECLARE
v_ordid item.ordid%TYPE := 601;
v_counter NUMBER(2) := 1;
BEGIN
LOOP
INSERT INTO item(ordid, itemid)
VALUES(v_ordid, v_counter);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
END;
Beispiel
![Page 28: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/28.jpg)
Prof. Dr. T. Kudraß 28
FOR-Schleife
Syntax
–FOR Schleife als abgekürzter Test einer bestimmten Anzahl von Iterationen
– Index wird bereits implizit deklariert
FOR counter in [REVERSE]
lower_bound..upper_bound LOOP
statement1;
statement2;
. . .
END LOOP;
![Page 29: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/29.jpg)
Prof. Dr. T. Kudraß 29
FOR-Schleife (Beispiel)
Beispiel:
Einfügen der ersten 10 Gegenstände für
Bestell-Nr 601.
DECLARE
v_ordid item.ordid%TYPE := 601;
BEGIN
FOR i IN 1..10 LOOP
INSERT INTO item(ordid, itemid)
VALUES(v_ordid, i);
END LOOP;
END;
![Page 30: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/30.jpg)
Prof. Dr. T. Kudraß 30
WHILE-Schleife
Syntax
WHILE-Schleife zur Wiederholung von
Befehlen solange eine Bedingung erfüllt ist,
d.h.TRUE.
WHILE condition LOOP
statement1;
statement2;
. . .
END LOOP;
Condition wird
geprüft am
Beginn jeder
Iteration.
![Page 31: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/31.jpg)
Prof. Dr. T. Kudraß 31
WHILE-Schleife (Beispiel)
ACCEPT p_new_order PROMPT 'Enter the order number: '
ACCEPT p_items -
PROMPT 'Enter the number of items in this order: '
DECLARE
v_count NUMBER(2) := 1;
BEGIN
WHILE v_count <= &p_items LOOP
INSERT INTO item (ordid, itemid)
VALUES (&p_new_order, v_count);
v_count := v_count + 1;
END LOOP;
COMMIT;
END;
/
Beispiel:
Einfügen von n Gegenständen (p_items) zu einer
selbstgewählten Bestell-Nr. (p_new_order)
![Page 32: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/32.jpg)
Prof. Dr. T. Kudraß 32
SQL Cursor
• Jeder SQL-Befehl, der vom Oracle-Server ausgeführt wird, ist mit einem individuellen Cursor assoziiert.
• Ein Cursor ist ein privater SQL Arbeitsbereich.
• Es gibt zwei Typen von Cursorn: – Implizite Cursor
– Explizite Cursor
• Oracle Server nutzt implizite Cursor, um SQL-Befehle (SELECT, PL/SQL DML) zu übersetzen und auszuführen.
• Explizite Cursor werden explizit durch den Programmierer benannt und deklariert.
![Page 33: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/33.jpg)
Prof. Dr. T. Kudraß 33
Kontrolle expliziter Cursor
• Erzeuge
benannte
SQL Area
DECLARE
• Identifiziere
die aktive
Menge
OPEN
• Lade die
aktuelle
Zeile in
Variablen
FETCH
• Teste auf
vorhandene
Zeilen
EMPTY?
No
• Freigabe
der aktiven
Menge
CLOSE
Yes
![Page 34: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/34.jpg)
Prof. Dr. T. Kudraß 34
Kontrolle expliziter Cursor
Open Cursor.
Cursor
Pointer
Fetch eine Zeile vom Cursor.
Cursor
Pointer
Solange bis leer.
Cursor
Pointer
Close Cursor.
Cursor
![Page 35: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/35.jpg)
Prof. Dr. T. Kudraß 35
Deklaration eines Cursors
Syntax
– keine INTO Klausel in der Cursor-Deklaration.
– Wenn Verarbeitung der Zeilen in bestimmter Reihen-
folge erforderlich, ORDER BY Klausel verwenden
Beispiel
CURSOR cursor_name IS
select_statement;
DECLARE
CURSOR emp_cursor IS
SELECT empno, ename
FROM emp;
CURSOR dept_cursor IS
SELECT *
FROM dept
WHERE deptno = 10;
BEGIN
...
![Page 36: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/36.jpg)
Prof. Dr. T. Kudraß 36
Öffnen eines Cursors
Syntax
–Öffnen des Cursors, um die Query
auszuführen und die aktive Menge zu
identifizieren.
–Wenn die Query keine Zeilen zurückliefert,
wird eine Exception erzeugt.
–Nutze Cursor-Attribute, um das Ergebnis
eines Fetch zu testen.
OPEN cursor_name;
![Page 37: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/37.jpg)
Prof. Dr. T. Kudraß 37
Daten lesen vom Cursor
Syntax
–Lese die aktuellen Zeilenwerte in
Ausgabevariablen („Fetch“)
–Gleiche Anzahl von Variablen wie Spalten
–Jede Variable muss mit den Spalten von
der Position her übereinstimmen
–Test, ob der Cursor Zeilen enthält
FETCH cursor_name INTO [variable1, variable2, ...]
| record_name];
![Page 38: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/38.jpg)
Prof. Dr. T. Kudraß 38
Daten lesen vom Cursor (Beispiel)
Beispiele
FETCH emp_cursor INTO v_empno, v_ename;
...
OPEN defined_cursor;
LOOP
FETCH defined_cursor INTO defined_variables
EXIT WHEN ...;
...
-- Process the retrieved data
...
END;
![Page 39: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/39.jpg)
Prof. Dr. T. Kudraß 39
Schließen eines Cursors
Syntax
–Schließe den Cursor nach beendeter
Verarbeitung der Zeilen
–Re-Open des Cursors wenn erforderlich
–nach Schließen eines Cursors können
Daten nicht mehr gefetcht werden.
CLOSE cursor_name;
![Page 40: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/40.jpg)
Prof. Dr. T. Kudraß 40
Explizite Cursor-Attribute
Einholen von Status-Informationen über einen Cursor
Attribut Typ Beschreibung
%ISOPEN Boolean Ist gleich TRUE wenn der Cursor
geöffnet ist
%NOTFOUND Boolean Ist gleich TRUE wenn der letzte
Fetch keine Zeile geliefert hat
%FOUND Boolean Ist gleich TRUE wenn der letzte
Fetch eine Zeile geliefert hat;
Komplement zu %NOTFOUND
%ROWCOUNT Number Gesamtanzahl Zeilen, die bisher
zurückgegeben wurden
![Page 41: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/41.jpg)
Prof. Dr. T. Kudraß 41
%ISOPEN Attribut
–Fetch von Zeilen nur möglich, wenn Cursor
geöffnet ist
–Nutze %ISOPEN Cursor-Attribut vor
Ausführung eines Fetch, um zu testen, ob
der Cursor geöffnet ist
Beispiel:
IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOP
FETCH emp_cursor...
![Page 42: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/42.jpg)
Prof. Dr. T. Kudraß 42
Cursor und Records
Verarbeitung der Zeilen einer aktiven Menge durch
Lesen der Werte (Fetch) in einen PL/SQL RECORD.
Beispiel DECLARE
CURSOR emp_cursor IS
SELECT empno, ename
FROM emp;
emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_record;
...
![Page 43: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/43.jpg)
Prof. Dr. T. Kudraß 43
FOR Schleifen mit Cursor
• Syntax
– FOR Schleife mit Cursor ist eine Abkürzung,
um explizite Cursor zu verarbeiten
– Implizit: Open, Fetch und Close des Cursor
– Record ist implizit deklariert
FOR record_name IN cursor_name LOOP
statement1;
statement2;
. . .
END LOOP;
![Page 44: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/44.jpg)
Prof. Dr. T. Kudraß 44
FOR-Schleifen mit Cursor (Beispiel)
Lese Angestellte nacheinander, bis keiner
mehr übrig ist.
DECLARE
CURSOR emp_cursor IS
SELECT ename, deptno
FROM emp;
BEGIN
FOR emp_record IN emp_cursor LOOP
-- implicit open and implicit fetch occur
IF emp_record.deptno = 30 THEN
...
END LOOP; -- implicit close occurs
END;
![Page 45: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/45.jpg)
Prof. Dr. T. Kudraß 45
Ausnahmebehandlung in PL/SQL
• Was ist eine Exception?
– Identifier in PL/SQL, der erzeugt wird während der
Ausführung
• Wie wird sie erzeugt?
– Ein Oracle-Fehler tritt auf
– Explizit erzeugen (benutzerdefinierte Ausnahme)
• Wie behandeln?
– Abfangen mit einem Handler
– Propagieren zur Aufrufumgebung
![Page 46: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/46.jpg)
Prof. Dr. T. Kudraß 46
Behandlung von Ausnahmen
DECLARE
BEGIN
END;
Raise
Exception EXCEPTION
Exception
wird abgefangen
Exception propagieren
DECLARE
BEGIN
END;
Raise
Exception EXCEPTION
Exception
nicht abgefangen
Exception propagiert
zur aufrufenden
Umgebung
Exception abfangen
![Page 47: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/47.jpg)
Prof. Dr. T. Kudraß 47
Abfangen von Exceptions
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
statement1;
statement2;
. . .
[WHEN exception3 [OR exception4 . . .] THEN
statement1;
statement2;
. . .]
[WHEN OTHERS THEN
statement1;
statement2;
. . .]
Syntax
![Page 48: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/48.jpg)
Prof. Dr. T. Kudraß 48
Abfangen von Oracle-Fehlern
–Standardnamen in Exception-Handling
Routine verwenden
–Beispiele vordefinierter Exceptions: NO_DATA_FOUND: SELECT liefert keine Daten
TOO_MANY_ROWS: Liefert mehrere Zeilen, nur eine
erlaubt
INVALID_CURSOR: Illegale Cursor-Operation
ZERO_DIVIDE: Division durch 0
DUP_VAL_ON_INDEX: Versuch, ein Duplikat einzufügen
![Page 49: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/49.jpg)
Prof. Dr. T. Kudraß 49
Vordefinierte Exception
BEGIN SELECT ... COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
statement1;
statement2;
WHEN TOO_MANY_ROWS THEN
statement1;
WHEN OTHERS THEN
statement1;
statement2;
statement3;
END;
Syntax
![Page 50: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/50.jpg)
Prof. Dr. T. Kudraß 50
Abfangen benutzerdefinierter Exceptions
• Benenne
Exception
Declare
Declarative
section
Raise
• Erzeuge die
Exception explizit
mit RAISE-
Statement
Executable
section
Reference
• Behandele
die erzeugte
Exception
Exception-handling
section
![Page 51: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/51.jpg)
Prof. Dr. T. Kudraß 51
Benutzerdefinierte Exceptions (Beispiel)
DECLARE
e_invalid_product EXCEPTION;
BEGIN
UPDATE product
SET descrip = '&product_description'
WHERE prodid = &product_number;
IF SQL%NOTFOUND THEN
RAISE e_invalid_product;
END IF;
COMMIT;
EXCEPTION
WHEN e_invalid_product THEN
DBMS_OUTPUT.PUT_LINE('Invalid product number.');
END;
e_invalid_product EXCEPTION; 1
RAISE e_invalid_product; 2
e_invalid_product 3
![Page 52: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/52.jpg)
Prof. Dr. T. Kudraß 52
Funktionen zum Abfangen von Exceptions (Beispiel)
DECLARE
v_error_code NUMBER;
v_error_message VARCHAR2(255);
BEGIN
...
EXCEPTION
...
WHEN OTHERS THEN
ROLLBACK;
v_error_code := SQLCODE ;
v_error_message := SQLERRM ;
INSERT INTO errors VALUES(v_error_code,
v_error_message);
END;
SQLCODE
SQLERRM
Fehler-Code
Fehler-Meldung
![Page 53: PL/SQL - Einführung - imn.htwk-leipzig.dekudrass/Lehrmaterial/DB1-VL/PDF/09-PL-S… · Prof. Dr. T. Kudraß 2 Vorteile von PL/SQL Application Other DBMSs Application Oracle with](https://reader034.vdocuments.net/reader034/viewer/2022051304/5a787e7a7f8b9a8c428c4ede/html5/thumbnails/53.jpg)
Prof. Dr. T. Kudraß 53
RAISE_APPLICATION_ERROR
Syntax
Prozedur zur Ausgabe benutzerdefinierter Fehler-
meldungen aus gespeicherten Subprogrammen
• genutzt an 2 Stellen: Executable Section,
Exception Section
• liefert Fehlermeldungen, die wie Oracle-Fehler
aussehen
raise_application_error (error_number,
message[, {TRUE | FALSE}]);