pl/sql – die prozedurale erweiterungssprache zu sql von andreas schulz [email protected]...
TRANSCRIPT
![Page 1: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/1.jpg)
PL/SQL – Die prozedurale Erweiterungssprache Zu SQL
vonAndreas Schulz
[email protected]@lpzm.siemens.de
![Page 2: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/2.jpg)
2
Übersicht1. Was ist PL/SQL?2. Aufbau eines PL/SQL-Programms3. Datentypen4. Bezeichner5. Kontrollstrukturen6. Fehlerbehandlung7. Unterprogramme8. Collections, Records und Objekte9. Packages10. Cursor
![Page 3: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/3.jpg)
3
1. Was ist PL/SQL? 4GL (Fourth-Generation Language) Plattformen abhängig von Oracle Moderne Features wie Datenkapselung,
Überladen, Ausnahmebehandlung, etc. SQL-Statements benutzen, um Daten zu
manipulieren Konstanten und Variablen deklarieren Prozeduren und Funktionen definieren
u. v. m.
![Page 4: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/4.jpg)
Manipulation der Daten über Unterprogramme mit definierten Privilegien
Zugriff auf Tabelle nicht notwendig Einbettung in andere
Programmiersprachen wie C++, Java, ... Gespeichertes Unterprogramm In kompilierter Form Aufruf durch Datenbank-Trigger, andere
UP, Oracle-Präcompiler-Applikation Gemeinsamer Speicherbereich (1 Kopie
für mehrere User)
![Page 5: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/5.jpg)
5
Limitierungen Optimiert für high-speed
Transaktionsprozesse Anzahl von Token (Bezeichner,
Schlüsselwörter, Operatoren, ...) begrenzt Spezifikationen: 32 KB Körper: 64 KB Komplexe SQL-Anweisungen Unterprogramme zerlegen Hostvariablen der Hochsprache
verwenden
![Page 6: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/6.jpg)
6
Grundlagen Viele Regeln anderer Programmiersprachen Hier: Abweichungen Nicht case-sensitiv Statement-Indikator: ; Potenz-Operator: ** Stringverkettung: || @-Operator für Datenbanken Kommentare:
/* */: Mehrzeilenkommentare -- bist zum Rest der Zeile
![Page 7: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/7.jpg)
7
2. Aufbau eines PL/SQL-Programms I Blockstrukturiert Blöcke: Prozeduren, Funktionen, anonyme
Blöcke Drei Teile:
[DECLARE-- Deklarationsteil]BEGIN-- Ausführungsteil[EXCEPTION-- Ausnahmebehandlungsteil]END;
![Page 8: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/8.jpg)
8
Aufbau eines PL/SQL-Programms II Unterblöcke im Ausführungs- und
Ausnahmebehandlungsteil Lokale Unterprogramme im
Deklarationsteil definierbar Nur vom Block aufrufbar, in dem
definiert
![Page 9: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/9.jpg)
9
3. Datentypen SQL-Datentypen wie CHAR, DATE
oder NUMBER PL/SQL-Datentypen wie BOOLEAN
oder BINARY_INTEGER
![Page 10: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/10.jpg)
10
Überblick über PL/SQL-Datentypen
BINARY_INTEGERDECDECIMALDOUBLE PRECISIONFLOATINTINTEGERNATURALNATURALNNUMBERNUMERICPLS_INTEGERPOSITIVEPOSITIVENREALSIGNTYPESMALLINT
CHARCHARACTERLONGLONG RAWNCHARNVARCHAR2RAWROWIDSTRINGUROWIDVARCHARVARCHAR2
BOOLEAN
DATE
Skalare Datentypen Zusammengesetzte Datentypen
RECORDTABLEVARRAY
Referenzen
REF CURSORREF object_type
LOB Datentypen
BFILEBLOBCLOBNCLOB
![Page 11: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/11.jpg)
11
Ausgewählte Datentypen Wahrheitswerte:
Dreiwertige Logik TRUE, FALSE, NULL (fehlender, unbekannter
oder nicht anwendbarer Wert) Nicht in Spalte einer Tabelle gelesen oder
geschrieben Datum:
Auch Tageszeit in Sekunden seit Mitternacht 1. Januar 4712 v. Chr. Bis 31. Dezember 9999
a. D. Berechnungen geben meist Anzahl Tage zurück
![Page 12: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/12.jpg)
BINARY_INTEGER vs. PLS_INTEGER: Operationen mit BINARY_INTEGER langsamer Überlaufexception bei PLS_INTEGER
SIGNTYPE ist Tristate-Logik CHAR-Datentyp (einfaches Zeichen):
Einfache Hochkommas Als Zahlen in Berechnungen (A := 9 * ‘8‘;) Implizite Umwandlung
CHAR-Datentyp (String): Apostrophe zum Quotieren ‘Don‘‘t leave without saving your work!‘
![Page 13: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/13.jpg)
13
Nutzerdefinierte Unterdatentypen SUBTYPE CHARACTER IS CHAR Eigene Unterdatentypen Wertebereich für Datentyp Kein neuer Datentyp Z. B.:
SUBTYPE BirthDate IS DATE NOT NULL;SUBTYPE Counter IS NATURAL;TYPE NameList IS TABLE OF VARCHAR2(10);SUBTYPE DutyRoster IS NameList;
![Page 14: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/14.jpg)
14
Deklaration von ... Variablen:
birthday DATE; emp_count SMALLINT; i, j, k SMALLINT; -- nicht zulässig birthday DATE; äquivalent zu birthday DATE := NULL;
Konstanten: credit_limit CONSTANT REAL := 5000.00;
![Page 15: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/15.jpg)
15
Erweiterte Funktionalitäten DEFAULT:
blood_type CHAR DEFAULT ‘0‘; blood_type CHAR := ‘0‘;
NOT NULL: acct_id INTEGER(4) NOT NULL := 9999;
%TYPE: credit REAL(7, 2); debit credit%TYPE; Datentyp einer Variable oder Tabellenspalte
%ROWTYPE
![Page 16: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/16.jpg)
Vorsicht bei Variablen, die gleichen Namen haben, wie Spaltennamen von Tabellen
Beispiel:DECLAREename VARCHAR2(10) := ‘KING‘;
BEGINDELETE FROM emp WHERE ename = ename;
Besser:<<main>>DECLAREename VARCHAR2(10) := ‚KING‘;
BEGINDELETE FROM emp WHERE ename = main.ename;
![Page 17: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/17.jpg)
17
Wertzuweisungen
1. Wertzuweisungszeichen: := tax := price * taxe_rate; bonus := current_salary * 0.10; amount := TO_NUMBER(SUBSTR(‘750
dollars‘, 1, 3); valid := FALSE;
2. Datenbankwerte in Variable selecten SELECT sal * 0.10 INTO Bonus FROM
emp WHERE empno = emp_id;
![Page 18: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/18.jpg)
18
4. Bezeichner max. 30 Zeichen Reservierte Wörter (z. B. BEGIN
und END) vordefinierte Bezeichner
z. B.: Exception INVALID_NUMBER
![Page 19: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/19.jpg)
19
Quotierte Bezeichner doppelte Hochkommas Verbotene Zeichen in Bezeichnern:
“*** header info ***“ “on/off“
Reservierte Bezeichner ansprechen SELECT acct, type, bal INTO ... SELECT acct, “TYPE“, bal INTO ... SELECT acct, “type“, bal INTO ...
![Page 20: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/20.jpg)
20
5. Kontrollstrukturen Conditional Control (IF-THEN-ELSE)
Iterative Control (LOOP) Sequential Control (GOTO)
![Page 21: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/21.jpg)
21
Iterative Controls I LOOP .. END LOOP FOR-LOOP:
FOR counter IN [REVERSE] lower_bound .. higher_bound LOOP
-- Sequence_of_statements
END LOOP; Keine Wertzuweisung für Zählvariable Explizite Deklarierung nicht nötig Keine Schrittweitenangabe
![Page 22: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/22.jpg)
22
Iterative Controls II CURSOR-FOR-LOOP WHILE-LOOP EXIT WHEN
LOOP. . .total := total + salary;EXIT WHEN total > 25000;
END LOOP;
![Page 23: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/23.jpg)
23
Sequential Control Verzweigung zu Sprungmarke Labels nur vor ausführbaren Befehl Verzweigungen in Unterblöcken
IF valid THEN..GOTO update_row; -- illegaler Sprung
ELSE..<<update_row>>UPDATE emp SET ..
END IF;
![Page 24: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/24.jpg)
24
6. Fehlerbehandlung bei Fehler Exception ausgelöst Reaktion in
Ausnahmebehandlungsblock Funktionen SQLCODE und SQLERRM Interne Ausnahmefehler: ZERO_DIVIDE
Nutzerdefinierte Ausnahmefehler: RAISE
EXCEPTION_INIT
![Page 25: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/25.jpg)
DECLAREout_of_stock EXCEPTION;number_on_hand NUMBER(4);
BEGIN....IF number_on_hand < 1 THEN
RAISE out_of_stock;END IF;
EXCEPTIONWHEN out_of_stock THEN
-- FehlerbehandlungWHEN OTHERS THEN
...END;
![Page 26: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/26.jpg)
DECLAREout_of_balance EXCEPTION;
BEGIN...BEGIN ---------- Unterblock beginnt
...IF ... THEN
RAISE out_of_balance;END IF;
EXCEPTIONWHEN out_of_balance THEN
-- FehlerbehandlungRAISE; -- Wiederauslösung
END; ------------ Unterblock endetEXCEPTION
WHEN out_of_balance THEN-- andere Fehlerbehandlung für Exc.
...END;
![Page 27: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/27.jpg)
27
7. Unterprogramme Prozeduren und Funktionen Unterprogrammblöcke mit
Einteilungen Funktionen mind. 1 RETURN-
Anweisungen (PROGRAM_ERROR)
![Page 28: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/28.jpg)
28
Syntax{FUNCTION|PROCEDURE} name
[(parameter[, parameter, ...])] RETURN datatype IS[local declarations]
BEGINexecutable statements
[EXCEPTIONexception handlers]
END [name];
![Page 29: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/29.jpg)
29
Parameter-DEFAULT-Werte Beispiel:
PROCEDURE create_dept (new_dname CHAR DEFAULT 'TEMP', new_loc CHAR DEFAULT 'TEMP') IS …
Aufruf: create_dept; create_dept('MARKETING'); create_dept('MARKETING', 'NEW YORK'); create_dept('NEW YORK'); create_dept(, 'NEW YORK'); -- illegal
![Page 30: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/30.jpg)
30
Positionelle vs. Benannte NotationDECLAREacct INTEGER;amt REAL;PROCEDURE credit_acct (acct_no INTEGER, amount REAL) IS ...
BEGINcredit_acct(acct, amt); credit_acct(amount=>amt,acct_no=>acct); credit_acct(acct_no=>acct,amount=>amt); credit_acct(acct, amount => amt);credit_acct(acct_no => acct, amt);-- letztes Beispiel illegal
![Page 31: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/31.jpg)
31
Ein- und Ausgabeparameter IN (Standard), OUT und IN OUT IN-Parameter wie Konstante Keine Referenz bei OUT und IN OUT Referenz durch NOCOPY Beispiel:
DECLARETYPE Staff IS VARRAY(200) OF Employee;PROCEDURE reorganize (my_staff IN OUT NOCOPY Staff) IS ...
![Page 32: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/32.jpg)
32
Stored Subprograms Werden in den Datenbanken
gespeichert CREATE PROCEDURE CREATE FUNCTION
![Page 33: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/33.jpg)
33
Aufruf von UP anderer Programmiersprachen Iimport java.sql.*;
import oracle.jdbc.driver.*;
public class Adjuster {
public static void raiseSalary (int empNo, float percent) throws
SQLException {
Connection conn = new OracleDriver().defaultConnection();
![Page 34: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/34.jpg)
34
Aufruf von UP anderer Programmiersprachen II
String sql = "UPDATE emp SET sal = sal * ? WHERE empno = ?";
try {PreparedStatement pstmt =
conn.prepareStatement(sql);pstmt.setFloat(1, (1 + percent
/ 100));pstmt.setInt(2, empNo);pstmt.executeUpdate();pstmt.close();
} catch (SQLException e) { …
![Page 35: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/35.jpg)
35
Aufruf von UP anderer Programmiersprachen III
Deklaration der Prozedur:CREATE PROCEDURE
raise_salary (empno NUMBER, pct NUMBER) AS LANGUAGE JAVA NAME
'Adjuster.raiseSalary(int, float)';
![Page 36: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/36.jpg)
36
8. Collections, Records und Objekte Felder, Listen, Bäume, etc. In PL/SQL Datentypen TABLE und VARRAY
Ermöglichen indizierte Tabellen und variable Felder
![Page 37: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/37.jpg)
37
Collections I Geordnete Gruppen von Elementen
eines Datentyps TABLE Nested Tables:
Elemente out-of-line in anderen Tabellen Größe dynamisch Elemente können herausgelöscht werden Deklaration: TYPE type_name IS TABLE OF element_type [NOT NULL]
![Page 38: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/38.jpg)
38
Collections II Indizierte Tabellen:
Deklaration: TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTEGER;
Weniger Datentypen möglich Varrays
Begrenzte maximale Größe Bei Deklaration NULL Konstruktor
Rückgabewerte bei Funktionen
![Page 39: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/39.jpg)
39
Collections III Können nicht verglichen werden Spezielle Methoden:
EXISTS: if courses.EXISTS(i) THEN ... COUNT: tatsächliche Anzahl der Elemente LIMIT: maximalste Anzahl oder NULL FIRST und LAST PRIOR und NEXT EXTEND TRIM DELETE
![Page 40: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/40.jpg)
40
Records Analog Records anderer PS Punktnotation %ROWTYPE Einlesen aus Tabelle Keine Speicherung in Datenbanken DECLARE
TYPE TimeRec IS RECORD (hours SMALLINT, minutes SMALLINT);
![Page 41: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/41.jpg)
41
Objektdatentypen Attribute Methoden Beispiel:
CREATE TYPE Bank_Account AS OBJECT (Acct_number INTEGER(5),balance REAL,MEMBER PROCEDURE open (amount IN REAL),MEMBER PROCEDURE close (num IN INTEGER, amount OUT REAL)
);
![Page 42: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/42.jpg)
42
9. Packages Objektschema, um logisch
zusammengehörige Daten und Unterprogramme zu gruppieren
2 Teile: Spezifikation: Schnittstelle zu
Applikationen Körper:
Vollständige Definition von Cursor und Ups Private Deklarationen optional
![Page 43: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/43.jpg)
43
Vorteile Modularität und Datenkapselung Bessere Performance: Laden des
gesamten Packages
![Page 44: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/44.jpg)
44
Vordefinierte Packages STANDARD:
Definiert PL/SQL-Umgebung Funktionen zur Berechnung
DBMS_Standard DBMS_ALERT DBMS_OUTPUT DBMS_PIPE UTL_FILE UTL_HTTP
![Page 45: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/45.jpg)
45
10. Cursor Temporäre Speicherung einer SELECT-
Anweisung Keine, eine oder mehrere Zeilen 3 Kommandos:
Öffnen: OPEN Bearbeiten: FETCH Schließen: CLOSE
DECLARE CURSOR c1 IS SELECT empno, ename, job FROM emp WHERE deptno = 20;
![Page 46: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/46.jpg)
46
Attribute I %FOUND:
Wenn Cursor geöffnet Vor erstem FETCH NULL FALSE, wenn letzter FETCH
fehlgeschlagen %NOTFOUND %ISOPEN %ROWCOUNT: Anzahl Zeilen bei FETCH
![Page 47: PL/SQL – Die prozedurale Erweiterungssprache Zu SQL von Andreas Schulz aschulz@imn.htwk-leipzig.de Andreas.Schulz@lpzm.siemens.de](https://reader036.vdocuments.net/reader036/viewer/2022070310/55204d6649795902118bb731/html5/thumbnails/47.jpg)
47
Attribute II Auch bei INSERT, UPDATE, DELETE
und SELECT INTO Beispiel:
DELETE FROM emp WHERE ...IF SQL%ROWCOUNT > 10 THEN-- more than 10 rows were deleted...
END IF;