Explizite Jedes SQL Statement, das der Oracle Server ausführt, hat einen individuellen, der verbunden ist mit: Implizitem : Declariert für alle DML-Statements und PL/SQL SELECT Statements. Explizitem : Declariert und benannt vom Programmierer Copyright Oracle Corporation, 1998. All rights reserved. 21-2 Copyright Oracle Corporation, 1998. All rights reserved. Explizite Funktionen Ergebnis 7369 SMITH CLERK 7566 JONES MANAGER 7788 SCOTT ANALYST Aktuelles Tupel 7876 ADAMS CLERK 7902 FORD ANALYST 21-3 Copyright Oracle Corporation, 1998. All rights reserved. Deklaration Lege einen benannten an (CREATE) Steuerung des expliziten s OPEN Identifiziere die aktiven Attribute FETCH Lade das aktive Tupel in die Variable LEER? Teste, ob Tupel existieren 21-4 Copyright Oracle Corporation, 1998. All rights reserved. Nein Ja Rückgabe mit FETCH, wenn Tupel gefunden wurden CLOSE Verlasse die aktiven Attribute
Steuerung des expliziten s Öffne den (OPEN) Zeiger Deklaration eines s Rufe ein Tupel mit dem ab (FETCH) Führe fort, bis kein Tupel mehr vorhanden ist Schließe den (CLOSE) Zeiger Zeiger CURSOR cursor_name IS select_statement; Keine INTO-Klausel in der -Deklaration 21-5 Copyright Oracle Corporation, 1998. All rights reserved. 21-6 Copyright Oracle Corporation, 1998. All rights reserved. Deklaration eines s DECLARE CURSOR c2 IS SELECT * FROM dept WHERE deptno = 10; OPEN Öffnen des s cursor_name; Öffne den zur Ausführung der Anfrage und zur Identifizierung des Attribut-Sets. Wenn die Anfrage keine Tupel zurückgibt wird keine Ausnahme angegeben (keine Fehlermeldung). -Attribute testen nach FETCH. 21-7 Copyright Oracle Corporation, 1998. All rights reserved. 21-8 Copyright Oracle Corporation, 1998. All rights reserved.
Daten vom holen FETCH cursor_name INTO [variable1, variable2, ] record_name]; Die aktiven Tupelwerte in die Output- Variablen speichern. Die gleiche Anzahl von Variablen bereitstellen Die Variablen werden von ihrer Position mit den Spalten verbunden. Überprüfen, ob die richtigen Attribute in den Variablen gespeichert sind.. 21-9 Copyright Oracle Corporation, 1998. All rights reserved. e Daten vom holen FETCH c1 INTO v_empno, v_ename; OPEN defined_cursor; LOOP FETCH defined_cursor INTO defined_variables EXIT WHEN ; -- Process the retrieved data 21-10 Copyright Oracle Corporation, 1998. All rights reserved. CLOSE schließen cursor_name; Nach dem kompletten Einlesen wird der geschlossen Vom geschlossenen können keine Daten geholt werden. müsste wiedereröffnet werden Explizite Attribute Man erhält Statusinformationen über einen. Attribut Typ Beschreibung %ISOPEN Boolean TRUE, wenn der offen ist %NOTFOUND Boolean TRUE, wenn keine Tupel zurückgegeben wurden %FOUND Boolean TRUE, wenn Tupel zurückgegeben wurden; Komplement zu %NOTFOUND %ROWCOUNT Number Anzahl der zurückgegebenen Tupel 21-11 Copyright Oracle Corporation, 1998. All rights reserved. 21-12 Copyright Oracle Corporation, 1998. All rights reserved.
Steuerung mehrfaches holen Mehrere Tupel werden mit einem expliziten in einer Schleife geholt. In jedem Schritt wird ein Tupel geholt. Mit dem %NOTFOUND Attribut wird getestet, ob noch Tupel vorhanden waren. : anwenden DECLARE v_empno emp.empno%type; v_ename emp.ename%type; OPEN c1; LOOP FETCH c1 INTO v_empno, v_ename; EXIT WHEN c1%notfound; -- Datenmanipulation oder.. END LOOP; CLOSE c1; 21-13 Copyright Oracle Corporation, 1998. All rights reserved. 21-14 Copyright Oracle Corporation, 1998. All rights reserved. Das %ISOPEN Attribut Tupel können nur geholt werden, wenn der offen ist. Mit dem %ISOPEN attribut kann gefragt werden, ob der offen ist. IF NOT c1%isopen THEN OPEN c1; END IF; LOOP FETCH c1 Das %NOTFOUND und das %ROWCOUNT Attribut Mit dem %ROWCOUNT attribut wird die exakte Anzahl der geholten Tupel ermittelt. Mit dem %NOTFOUND attribut wird ermittelt, wann die Schleife verlassen werden muss. 21-15 Copyright Oracle Corporation, 1998. All rights reserved. 21-16 Copyright Oracle Corporation, 1998. All rights reserved.
und Records Die Werte der bearbeiteten Tupel im aktiven Set werden oftmals in einem PL/SQL RECORD gespeichert. Example emp_record c1%rowtype; OPEN c1;... FETCH c1 INTO emp_record; 21-17 Copyright Oracle Corporation, 1998. All rights reserved. FOR Schleifen FOR record_name IN cursor_name LOOP statement1; statement2;... END LOOP; Verkürzen der Bearbeitung. Implizites open, fetch und close wird angewandt. Der RECORD muss nicht deklariert werden - er ist implizit deklariert. 21-18 Copyright Oracle Corporation, 1998. All rights reserved. FOR Schleifen Alle Angestellten werden einzeln durchmustert, bis die Bedingung erfüllt ist. DECLARE FOR emp_record IN c1 LOOP -- implizites Open und implizites Fetch IF emp_record.empno = 7839 THEN END LOOP; -- implizites Close FOR Schleifen mit Unterabfragen Man muss den nicht deklarieren. FOR emp_record IN ( FROM emp) LOOP -- implizites Open und implizites Fetch IF emp_record.empno = 7839 THEN END LOOP; -- implizites Close 21-19 Copyright Oracle Corporation, 1998. All rights reserved. 21-20 Copyright Oracle Corporation, 1998. All rights reserved.
typen: Zusammenfassung Implizite : Für alle DML Statements und single-row queries. Explizite : Für Anfragen auf null, eine oder mehrere Tupel. Veränderungen mit expliziten. Überprüfen des status mit den attributen. Benutze die FOR Schleife. Links http://www.datenbank-plsql.de http://www.db.cs.ucdavis.edu/ teaching/sqltutorial/ http://infolab.stanford.edu/ ~ullman/fcdb/oracle/or-plsql.html http://www.a-wilde.de/hp/studium/db/plsql4.htm http://www.dke.jku.at/teaching/exams/ dke/uebungsstoff/plsql.pdf http://sheikyerbouti.developpez.com/pl_sql/ 21-21 Copyright Oracle Corporation, 1998. All rights reserved. 21-22 Copyright Oracle Corporation, 1998. All rights reserved.