Prozeduren - Datenbanken

Werbung
Überblick
• Eine Prozedur ist ein PL/SQL Block mit
Namen, der Aktionen durchführt
Prozeduren
Copyright © Oracle Corporation, 1998. All rights reserved.
Syntax zur Prozedurerzeugung
CREATE [OR REPLACE] PROCEDURE procedure_name
(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
. . .
IS [AS]
-- kein DECLARE
PL/SQL Block;
• Eine Prozedur kann als Objekt in der
Datenbank im Data Dictionary
gespeichert und wiederholt ausgeführt
werden.
SQL2 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Entwicklung von Stored
Procedures
Edit
System
editor
1
Text
file
Storage in
database
Source
code
Compile
p-code
Execute
SQL3 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL4 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
2
Erzeugung Storage Procedures
mit SQL*Plus
Prozedur-Parameter Modi
Procedure
1. Text für das CREATE PROCEDURE
Statement in einen einfachen Editor
eingeben und als Skriptfile speichern.
(.sql Extension).
2. Als Skriptfile testen
Calling
environment
IN parameter
OUT parameter
IN OUT parameter
(DECLARE)
BEGIN
3. Umschreiben zur Prozedur
EXCEPTION
END;
SQL5 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Parameter Modi für formale Parameter
IN
OUT
IN OUT
Default
spezifizieren
spezifizieren
Wert geht ins
Unterprogramm ein
Rückgabe zum
rufenden
Programm
Wert geht ein ins
Unterprogramm,
Rückgabe zum rufenden Programm
Formaler Parameter
kann Konstante
sein
Nicht initialisierte
Variable
Initialisierte
Variable
Aktueller Parameter
kann sein : Literal,
Ausdruck, Konstante oder initialisierte Variable
Muss eine Variable Muss eine Variable
sein
sein
SQL7 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL6 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
IN Parameter: Beispiel
7369
v_id
SQL> CREATE OR REPLACE PROCEDURE raise_salary
2 (v_id in emp.empno%TYPE)
3 IS
-- beachte kein DECLARE
4 BEGIN
5
UPDATE emp
6
SET
sal = sal * 1.10
7
WHERE empno = v_id;
8 END raise_salary;
9 /
Procedure created.
SQL> EXECUTE raise_salary (7369)
PL/SQL procedure successfully completed.
SQL8 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
OUT Parameter: Beispiel
Rufende Ebene
QUERY_EMP Prozedur
7654
v_id
MARTIN v_name
1250
v_salary
1400
v_ comm
SQL9 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
OUT Parameter und SQL*Plus
OUT Parameter: Beispiel
SQL>
1
2
3
4
5
6
7
8
9
10
11
12
CREATE OR REPLACE PROCEDURE query_emp
(v_id
IN
emp.empno%TYPE,
v_name
OUT emp.ename%TYPE,
v_salary OUT emp.sal%TYPE,
v_comm
OUT emp.comm%TYPE)
IS
BEGIN
SELECT
ename, sal, comm
INTO
v_name, v_salary, v_comm
FROM
emp
WHERE
empno = v_id;
END query_emp;
/
SQL10 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
IN OUT Parameter
Rufende Ebene
SQL> START emp_query.sql
Procedure created.
'8006330575'
SQL> VARIABLE g_name
SQL> VARIABLE g_salary
SQL> VARIABLE g_comm
varchar2(15)
number
number
SQL> EXECUTE query_emp (7654, :g_name, :g_salary,
2 :g_comm)
PL/SQL procedure successfully completed.
SQL> PRINT g_name
G_NAME
--------------MARTIN
SQL11 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
FORMAT_PHONE Prozedur
'(800)633-0575'
v_phone_no
SQL> CREATE OR REPLACE PROCEDURE format_phone
2 (v_phone_no IN OUT VARCHAR2)
3 IS
4 BEGIN
5
v_phone_no := '(' || SUBSTR(v_phone_no,1,3) ||
6
')' || SUBSTR(v_phone_no,4,3) ||
7
'-' || SUBSTR(v_phone_no,7);
8 END format_phone;
9 /
SQL12 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
FORMAT_PHONE von SQL*Plus
aufrufen
SQL>VARIABLE g_phone_no varchar2(15)
SQL> BEGIN :g_phone_no := '8006330575'; END;
2 /
PL/SQL procedure successfully completed.
Arten der Parameterübergabe
• Position
• Mit Namen
• Kombination
SQL> EXECUTE format_phone (:g_phone_no)
PL/SQL procedure successfully completed.
SQL> PRINT g_phone_no
G_PHONE_NO
--------------(800)633-0575
SQL13 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Parameterübergabe: Beispiel
Prozedur
SQL>
1
2
3
4
5
6
7
8
CREATE OR REPLACE PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc
IN dept.loc%TYPE
DEFAULT 'unknown')
IS
BEGIN
INSERT INTO dept
VALUES (dept_deptno.NEXTVAL, v_name, v_loc);
END add_dept;
/
SQL15 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL14 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Beispiel:Parameterübergabe
SQL>
2
3
4
begin
add_dept;
add_dept ( 'TRAINING', 'NEW YORK');
add_dept ( v_loc => 'DALLAS', v_name =>
'EDUCATION') ;
5 add_dept ( v_loc => 'BOSTON') ;
6 end;
7 /
PL/SQL procedure successfully completed.
SQL>
SELECT * FROM dept;
DEPTNO
-----...
41
42
43
44
DNAME
-------------...
unknown
TRAINING
EDUCATION
unknown
LOC
------------...
unknown
NEW YORK
DALLAS
BOSTON
SQL16 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Aufrufen einer Prozedur aus
einem anonymen PL/SQL Block
DECLARE
v_id NUMBER := 7900;
BEGIN
raise_salary(v_id);
COMMIT;
...
--Prozeduraufruf
END;
SQL17 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Prozeduren löschen
• In SQL*Plus:
server-side procedures mit DROP
Aufruf einer Prozedur aus einer
Stored Procedure
SQL> CREATE OR REPLACE PROCEDURE process_emps
2 IS
3
CURSOR emp_cursor IS
4
SELECT empno
5
FROM
emp;
6 BEGIN
7
FOR emp_rec IN emp_cursor LOOP
8
raise_salary(emp_rec.empno); --Prozeduraufruf
9
END LOOP;
10 COMMIT;
11 END process_emps;
12 /
SQL18 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Löschen von Server-Side
Procedures
SQL*Plus verwenden:
• Syntax
DROP PROCEDURE procedure_name
• Beispiel
SQL> DROP PROCEDURE raise_salary;
Procedure dropped.
SQL19 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL20 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Herunterladen