PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,

Slides:



Advertisements
Ähnliche Präsentationen
E-Solutions mySchoeller.com for Felix Schoeller Imaging
Advertisements

Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen.
Datenintegrität Integitätsbedingungen Schlüssel
PL/SQL - Einführung. © Prof. T. Kudraß, HTWK Leipzig Vorteile Application Other DBMSs Application Oracle with PL/SQL SQL SQL SQL SQL SQLIF...THENSQLELSESQL.
PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,
PL/SQL - Einführung 1.
Transaction Synchronization for XML Data in Client Server Web Applications Stefan Böttcher & Adelhard Türling Universität Paderborn.
PL/SQL - Kurze Einführung -.
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
© A. Kemper / A. Eickler1 Kapitel 5: Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung.
Design by Contract with JML - Teil 2
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 Tabellen In relationalen DB werden Daten in Tabellen organisiert Jede Spalte enthält eine bestimmte Art von Information,
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
IS: Datenbanken, © Till Hänisch 2000 Übungen SQL.
Dynamische Webseiten Java servlets.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 3 Claudio Moraga, Gisbert Dittrich FBI Unido
PL/SQL – Die prozedurale Erweiterungssprache Zu SQL
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
Objektrelationale Datenbanken (am Beispiel Oracle)
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
SQL Pattern & Spezialitäten. © Prof. T. Kudraß, HTWK Leipzig Rekursive Anfragen Syntax (SQL:1999) WITH RECURSIVE Rekursionstabelle (Spaltenliste) AS (
Objektrelationale Datenbanken (am Beispiel Oracle)
Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.
PL/SQL - Einführung. © Prof. T. Kudraß, HTWK Leipzig Vorteile Application Other DBMSs Application Oracle with PL/SQL SQL SQL SQL SQL SQLIF...THENSQLELSESQL.
PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,
Oracle interMedia Audio Vortrag für das Seminar Oracle Zusatzoptionen Chris Haußmann.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
GSI GSI Status Juni 2005 Michael Dahlinger, IT 14/6/2005.
objekt-relationale Datenbanken
M A X - P L A N C K - G E S E L L S C H A F T Bericht des Partnerinstituts Sabine Krott 1.0 Pilotentreffen im Harnack-Haus, 8. Juni 2006 Distribution:
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
IBM DB2 V8 for z/OS Neue Funktionen für AE und Applikationsprogramme
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts von IBM zu Beginn der 70er Jahre: Entwicklung der Sprache.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
Datenintegrität Integitätsbedingungen Schlüssel
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Algorithmen und Datenstrukturen Übungsmodul 6
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
Template v5 October 12, Copyright © Infor. All Rights Reserved.
Copyright Oracle Corporation, All rights reserved. 6 Unteranfragen (Subqueries)
PL/SQL - Kurze Einführung April 2003Übung Data Warehousing: PL/SQL 2 PL/SQL.. ist eine Oracle-eigene, prozedurale Programmiersprache Sämtliche.
RZPD Deutsches Ressourcenzentrum für Genomforschung GmbH DESPRAD-Meeting 02/09/2003 Steffen Schulze-Kremer (until 7/2003) Bernd Drescher (since 8/2003)
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
procedural language / structured query language
Page 1 XXX21/08/2014 Implemented by Benutzen Sie diese Titelfolie für Programme und Projekte im Ausland. Setzen Sie das „einheitliche Logo der Zusammenarbeit“
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Integritätsbedingungen (Constraints)
10 Sichten (Views) Ziele Verständnis einer View Erzeugen einer View Lesen von Daten durch eine Sicht Ändern der Definition von Views Einfügen, Ändern.
7 Verändern von Daten. 9-2 Ziele Beschreibe jeden DML Befehl Einfügen von Zeilen in eine Tabelle Ändern von Zeilen in einer Tabelle Löschen von Zeilen.
11 Verwaltung von Abhängigkeiten. Ziele Am Ende dieser Lektion verfügen Sie über die folgenden Kenntnisse: Überwachen prozeduraler Abhängigkeiten Effekte.
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
SQL-Prozeduren Charakteristika: Kapselung von SQL-Anweisungen in Prozeduren, die wiederholt aufgerufen werden können. Dazu Verbergen parametrisierter SQL-
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
The Programming Language Pascal
DB2 UDB im z/VSE Heinz Peter Maassen – Lattwein GmbH COURSE Tagung Bad Hersfeld 2008.
Abfragesprache SQL in ORACLE
Vorlesung #8 SQL (Teil 5).
 Präsentation transkript:

PL/SQL - Programmierung von Programmeinheiten

© Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block, der eine Aktion ausführt. – Eine Prozedur kann in der Datenbank gespeichert sein als Datenbankobjekt zur wiederholten Ausführung.

© Prof. T. Kudraß, HTWK Leipzig Syntax zum Erzeugen von Prozeduren CREATE [OR REPLACE] PROCEDURE procedure_name (argument1 [mode1] datatype1, argument2 [mode2] datatype2,... IS [AS] PL/SQL Block; CREATE [OR REPLACE] PROCEDURE procedure_name (argument1 [mode1] datatype1, argument2 [mode2] datatype2,... IS [AS] PL/SQL Block;

© Prof. T. Kudraß, HTWK Leipzig Entwicklung von Prozeduren/Funktionen Text file Source Code P-Code Editieren Speichern in Datenbank Compile Execute 1 2 System editor OracleProcedureBuilder

© Prof. T. Kudraß, HTWK Leipzig Parameter-Modi IN OUT Muß bekannt sein Wert zum Subpro- gramm übermittelt; Rückgabe an Aufrufumgebung Initialisierte Variable Muß Variable sein OUT Muß bekannt sein Rückgabe an Aufrufumgebung Uninitialisierte Variable Muß Variable sein IN Default Wert wird zum Subprogram übermittelt Formaler Parameter wie Konstante Aktueller Parameter: Literal, Ausdruck, Kon- stante, init.Variable

© Prof. T. Kudraß, HTWK Leipzig IN-Parameter: Beispiel SQL> CREATE OR REPLACE PROCEDURE raise_salary 2 (v_id in emp.empno%TYPE) 3 IS 4 BEGIN 5UPDATE emp 6SET sal = sal * WHERE empno = v_id; 8 END raise_salary; 9 / Procedure created. SQL> EXECUTE raise_salary (7369) PL/SQL procedure successfully completed. SQL> CREATE OR REPLACE PROCEDURE raise_salary 2 (v_id in emp.empno%TYPE) 3 IS 4 BEGIN 5UPDATE emp 6SET sal = sal * WHERE empno = v_id; 8 END raise_salary; 9 / Procedure created. SQL> EXECUTE raise_salary (7369) PL/SQL procedure successfully completed. v_id7369

© Prof. T. Kudraß, HTWK Leipzig OUT-Parameter: Beispiel SQL> CREATE OR REPLACE PROCEDURE query_emp 1 (v_id INemp.empno%TYPE, 2 v_name OUTemp.ename%TYPE, 3 v_salary OUTemp.sal%TYPE, 4 v_comm OUTemp.comm%TYPE) 5 IS 6 BEGIN 7 SELECT ename, sal, comm 8 INTO v_name, v_salary, v_comm 9 FROM emp 10 WHERE empno = v_id; 11 END query_emp; 12 / SQL> CREATE OR REPLACE PROCEDURE query_emp 1 (v_id INemp.empno%TYPE, 2 v_name OUTemp.ename%TYPE, 3 v_salary OUTemp.sal%TYPE, 4 v_comm OUTemp.comm%TYPE) 5 IS 6 BEGIN 7 SELECT ename, sal, comm 8 INTO v_name, v_salary, v_comm 9 FROM emp 10 WHERE empno = v_id; 11 END query_emp; 12 /

© Prof. T. Kudraß, HTWK Leipzig OUT-Parameter und SQL*Plus SQL> START emp_query.sql Procedure created. SQL> START emp_query.sql Procedure created. SQL> VARIABLE g_namevarchar2(15) SQL> VARIABLE g_salarynumber SQL> VARIABLE g_commnumber SQL> VARIABLE g_namevarchar2(15) SQL> VARIABLE g_salarynumber SQL> VARIABLE g_commnumber SQL> EXECUTE query_emp (7654, :g_name, :g_salary, 2 :g_comm) PL/SQL procedure successfully completed. SQL> EXECUTE query_emp (7654, :g_name, :g_salary, 2 :g_comm) PL/SQL procedure successfully completed. SQL> PRINT g_name G_NAME MARTIN SQL> PRINT g_name G_NAME MARTIN

© Prof. T. Kudraß, HTWK Leipzig Parameter Passing Position Namen Kombination aus beiden

© Prof. T. Kudraß, HTWK Leipzig Parameter Passing (Beispielprozedur) SQL> CREATE OR REPLACE PROCEDURE add_dept 1 (v_name IN dept.dname%TYPE DEFAULT 'unknown', 2 v_loc IN dept.loc%TYPE DEFAULT 'unknown') 3 IS 4 BEGIN 5 INSERT INTO dept 6 VALUES (dept_deptno.NEXTVAL, v_name, v_loc); 7 END add_dept; 8 / SQL> CREATE OR REPLACE PROCEDURE add_dept 1 (v_name IN dept.dname%TYPE DEFAULT 'unknown', 2 v_loc IN dept.loc%TYPE DEFAULT 'unknown') 3 IS 4 BEGIN 5 INSERT INTO dept 6 VALUES (dept_deptno.NEXTVAL, v_name, v_loc); 7 END add_dept; 8 /

© Prof. T. Kudraß, HTWK Leipzig Parameter Passing (Beispiele) SQL> begin 2 add_dept; 3 add_dept ( 'TRAINING', 'NEW YORK'); 4 add_dept ( v_loc => 'DALLAS', v_name => 'EDUCATION') ; 5 add_dept ( v_loc => 'BOSTON') ; 6 end; 7 / PL/SQL procedure successfully completed. SQL> begin 2 add_dept; 3 add_dept ( 'TRAINING', 'NEW YORK'); 4 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; DEPTNODNAMELOC unknownunknown 42TRAININGNEW YORK 43EDUCATIONDALLAS 44 unknownBOSTON SQL>SELECT * FROM dept; DEPTNODNAMELOC unknownunknown 42TRAININGNEW YORK 43EDUCATIONDALLAS 44 unknownBOSTON

© Prof. T. Kudraß, HTWK Leipzig Löschen von Prozeduren Mit SQL*Plus: Drop der serverseitigen Prozedur Beispiel Syntax DROP PROCEDURE procedure_name SQL> DROP PROCEDURE raise_salary; Procedure dropped. SQL> DROP PROCEDURE raise_salary; Procedure dropped. Mit Procedure Builder: Drop clientseitige oder serverseitige Prozedur

© Prof. T. Kudraß, HTWK Leipzig Zusammenfassung Prozeduren Eine Prozedur ist ein benannter PL/SQL Block, der eine Aktion ausführt. Parameter zum Übermitteln der Daten von der Aufrufumgebung zur Prozedur. Prozeduren können von jedem Tool oder Sprache aufgerufen werden, die PL/SQL unterstützen. Prozeduren können als Bausteine für eine Applikation dienen.

© Prof. T. Kudraß, HTWK Leipzig Gespeicherte Funktionen Eine Funktion ist ein benannter PL/SQL Block, der einen Wert zurückliefert. Eine Funktion kann in der Datenbank als Datenbankobjekt für wiederholte Ausführung gespeichert werden. Eine Funktion kann als Teil eines Ausdrucks aufgerufen werden.

© Prof. T. Kudraß, HTWK Leipzig Erzeugen neuer Funktionen CREATE [OR REPLACE] FUNCTION function_name (argument1 [mode1] datatype1, argument2 [mode2] datatype2,... RETURN datatype IS|AS PL/SQL Block; CREATE [OR REPLACE] FUNCTION function_name (argument1 [mode1] datatype1, argument2 [mode2] datatype2,... RETURN datatype IS|AS PL/SQL Block; Syntax

© Prof. T. Kudraß, HTWK Leipzig Erzeugen neuer Funktionen (Beispiel) SQL> CREATE OR REPLACE FUNCTION get_sal 2 (v_id IN emp.empno%TYPE) 3 RETURN NUMBER 4 IS 5 v_salaryemp.sal%TYPE :=0; 6 BEGIN 7 SELECT sal 8 INTO v_salary 9 FROM emp 10 WHERE empno = v_id; 11 RETURN (v_salary); 12 END get_sal; 13 / SQL> CREATE OR REPLACE FUNCTION get_sal 2 (v_id IN emp.empno%TYPE) 3 RETURN NUMBER 4 IS 5 v_salaryemp.sal%TYPE :=0; 6 BEGIN 7 SELECT sal 8 INTO v_salary 9 FROM emp 10 WHERE empno = v_id; 11 RETURN (v_salary); 12 END get_sal; 13 / SQL*Plus

© Prof. T. Kudraß, HTWK Leipzig Ausführen von Funktionen –Aufrufen einer Funktion als Teil eines PL/SQL Ausdrucks. –Erzeugen einer Host-Variable, um den Rückgabewert aufzunehmen. –Ausführen der Funktion. Host-Variable wird belegt mit dem RETURN Wert. SQL> VARIABLE g_salary number SQL> EXECUTE :g_salary := get_sal(7934) PL/SQL procedure successfully completed. SQL> EXECUTE :g_salary := get_sal(7934) PL/SQL procedure successfully completed.

© Prof. T. Kudraß, HTWK Leipzig Wo können benutzerdefinierter Funktionen aufgerufen werden? Select-Liste in einem SELECT Befehl Bedingung in einer WHERE oder HAVING Klausel CONNECT BY, START WITH, ORDER BY, und GROUP BY Klausel VALUES Klausel eines INSERT Befehls SET Klausel eines UPDATE Befehls

© Prof. T. Kudraß, HTWK Leipzig Restriktionen für benutzerdefinierte Funktionen Muß als gespeicherte Funktion vorliegen. Nur IN Parameter erlaubt. Erlaubte Datentypen: CHAR, DATE, oder NUMBER - keine PL/SQL Typen wie BOOLEAN, RECORD, oder TABLE. Rückgabe-Typ muß ein interner Typ des Oracle Server sein. INSERT, UPDATE, oder DELETE verboten. Keine Aufrufe von Subprogrammen, die diese Restriktion verletzen.

© Prof. T. Kudraß, HTWK Leipzig Löschen von Funktionen Mit SQL*Plus Syntax Beispiel SQL> DROP FUNCTION get_salary; Function dropped. SQL> DROP FUNCTION get_salary; Function dropped. DROP FUNCTION function_name Procedure Builder (Löschen clientseitiger und serverseitiger Funktionen möglich)

© Prof. T. Kudraß, HTWK Leipzig Vergleich von Prozeduren und Funktionen Prozedur Ausführen als PL/SQL Befehl Kein RETURN Datentyp Kann einen oder meh- rere Werte zurückgeben Funktion Aufruf als Teil eines Ausdrucks RETURN Datentyp Muß einen Wert zurückliefern

© Prof. T. Kudraß, HTWK Leipzig Packages: Überblick Gruppierung logisch zusammenhängender PL/SQL- Typen, Konstrukte (Cursor, Exeptions, Variable) und Subprogramme Besteht aus zwei Teilen: – Spezifikation – Rumpf Kann nicht aufgerufen, parametrisiert oder geschachtelt werden Erlaubt Oracle8, gleichzeitig mehrere Objekte in den Speicher einzulesen

© Prof. T. Kudraß, HTWK Leipzig Vorteile von Packages Information Hiding und Kapselung – Objekte eines Packages benutzbar, ohne interne Implementierung zu kennen Top-Down Design – Kopf kann vor dem Rumpf implementiert werden, d.h. Nutzung der deklarierten Objekte schon möglich Objektpersistenz – Objekte, die im Kopf deklariert werden, bleiben für die Dauer der Sitzung erhalten

© Prof. T. Kudraß, HTWK Leipzig Vorteile von Packages (Forts.) Bessere Performance – Package wird als ganzes in den Hauptspeicher geladen, spart weitere I/Os Overloading – Mehrere Prozeduren und Funktionen mit dem gleichen Namen im Package, jeweils mit unterschiedlichen Parametern (Anzahl, Typ)

© Prof. T. Kudraß, HTWK Leipzig Beispiel-Package: COMM_PACKAGE G_COMM RESET_COMM procedure declaration VALIDATE_COMM function definition Package-Spezifikation Package-Rumpf RESET_COMM procedure definition

© Prof. T. Kudraß, HTWK Leipzig Beispiel Package-Spezifikation SQL>CREATE OR REPLACE PACKAGE comm_package IS 2 g_comm NUMBER := 10; --initialized to 10 3 PROCEDURE reset_comm 4 (v_comm INNUMBER); 5 END comm_package; 6 /

© Prof. T. Kudraß, HTWK Leipzig Beispiel Package-Rumpf SQL>CREATE OR REPLACE PACKAGE BODY comm_package IS 2 FUNCTION validate_comm 3 (v_comm IN NUMBER) RETURN BOOLEAN 4 IS 5 v_max_comm NUMBER; 6 BEGIN 7 SELECT MAX(comm) 8 INTO v_max_comm 9 FROM emp; 10 IF v_comm > v_max_comm THEN RETURN(FALSE); 11 ELSE RETURN(TRUE); 12 END IF; 13 END validate_comm; 14 END comm_package; 15 /

© Prof. T. Kudraß, HTWK Leipzig Beispiel Package-Rumpf (Forts.) SQL>PROCEDURE reset_comm 2 (v_comm IN NUMBER) 3 IS 4 v_validBOOLEAN; 5 BEGIN 6 v_valid := validate_comm(v_comm); 7 IF v_valid = TRUE THEN 8 g_comm := v_comm; 9 ELSE 10 RAISE_APPLICATION_ERROR 11(-20210,'Invalid commission'); 12 END IF; 13 END reset_comm; 14 END comm_package; 15 /

© Prof. T. Kudraß, HTWK Leipzig Aufruf von Package-Konstrukten Beispiel1: Aufruf einer Package-Prozedur aus SQL*Plus. Beispiel2: Aufruf einer Package-Prozedur in einem anderen Schema. SQL>EXECUTE comm_package.reset_comm(1500); SQL>EXECUTE scott.comm_package.reset_comm(1500);

© Prof. T. Kudraß, HTWK Leipzig Löschen von Packages DROP PACKAGE package_name Löschen der Package-Spezifikation und des Rumpfes: Löschen nur des Package-Rumpfes: DROP PACKAGE BODY package_name

© Prof. T. Kudraß, HTWK Leipzig Erzeugen von Triggern Trigger-Zeitpunkt: BEFORE oder AFTER Auslösendes Event: INSERT oder UPDATE oder DELETE Tabellen-Name: ON Tabelle Trigger-Type: Zeilen- oder befehlsorientiert WHEN-Klausel: Einschränkende Bedingung Trigger-Rumpf: DECLARE BEGIN END;

© Prof. T. Kudraß, HTWK Leipzig Auslösen von Triggern EMPNO ENAMEKINGBLAKESMITHDEPTNO BEFORE statement trigger BEFORE row trigger AFTER row trigger BEFORE row trigger AFTER row trigger BEFORE row trigger AFTER row trigger AFTER statement trigger

© Prof. T. Kudraß, HTWK Leipzig Befehlsorientierter Trigger (Syntax) CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name PL/SQL block; CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name PL/SQL block;

© Prof. T. Kudraß, HTWK Leipzig Befehlsorientierter BEFORE- Trigger Beispiel SQL> CREATE OR REPLACE TRIGGER secure_emp 2 BEFORE INSERT ON emp 3 BEGIN 4 IF (TO_CHAR (sysdate,'DY') IN ('SAT','SUN')) 5 OR (TO_CHAR(sysdate,'HH24')NOT BETWEEN 6 '08' AND '18' 7 THEN RAISE_APPLICATION_ERROR (-20500, 8 'You may only insert into EMP during normal 9 hours.'); 10 END IF; 11 END; 12 / SQL> CREATE OR REPLACE TRIGGER secure_emp 2 BEFORE INSERT ON emp 3 BEGIN 4 IF (TO_CHAR (sysdate,'DY') IN ('SAT','SUN')) 5 OR (TO_CHAR(sysdate,'HH24')NOT BETWEEN 6 '08' AND '18' 7 THEN RAISE_APPLICATION_ERROR (-20500, 8 'You may only insert into EMP during normal 9 hours.'); 10 END IF; 11 END; 12 /

© Prof. T. Kudraß, HTWK Leipzig Zeilenorientierter Trigger (Syntax) CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name [REFERENCING OLD AS old | NEW AS new] FOR EACH ROW [WHEN condition] PL/SQL block; CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name [REFERENCING OLD AS old | NEW AS new] FOR EACH ROW [WHEN condition] PL/SQL block;

© Prof. T. Kudraß, HTWK Leipzig Zeilenorientierter Trigger (Beispiel) SQL>CREATE OR REPLACE TRIGGER audit_emp_values 2 AFTER DELETE OR INSERT OR UPDATE ON emp 3 FOR EACH ROW 4 BEGIN 5 INSERT INTO audit_emp_values (user_name, 6 timestamp, id, old_last_name, new_last_name, 7 old_title, new_title, old_salary, new_salary) 8 VALUES (USER, SYSDATE, :old.empno, :old.ename, 9 :new.ename, :old.job, :new.job, 10 :old.sal, :new.sal); 11 END; 12 / SQL>CREATE OR REPLACE TRIGGER audit_emp_values 2 AFTER DELETE OR INSERT OR UPDATE ON emp 3 FOR EACH ROW 4 BEGIN 5 INSERT INTO audit_emp_values (user_name, 6 timestamp, id, old_last_name, new_last_name, 7 old_title, new_title, old_salary, new_salary) 8 VALUES (USER, SYSDATE, :old.empno, :old.ename, 9 :new.ename, :old.job, :new.job, 10 :old.sal, :new.sal); 11 END; 12 / Verwendung von old und new-Präfixen beachten!

© Prof. T. Kudraß, HTWK Leipzig Ausführung von Triggern 1. Ausführung aller befehlsorientierten BEFORE Trigger 2. Für jede betroffene Zeile a. Ausführung aller zeilenorientierten BEFORE Trigger b. Ausführung des DML-Befehls und der Integritätsprüfungen c. Ausführung aller zeilenorientierten AFTER Trigger 3. Ausführung der verzögerten Integritätsprüfungen 4. Ausführung aller befehlsorientierten AFTER Trigger

© Prof. T. Kudraß, HTWK Leipzig Anwendungen für Trigger Security Security Auditing Datenintegrität Referentielle Integrität Replikation von Tabellen Abgeleitete Daten Aufzeichnen von Ereignissen

© Prof. T. Kudraß, HTWK Leipzig Objekttyp –Ist ein benutzerdefinierter zusammengesetzter Datentyp –Kapselt eine Datenstruktur zusammen mit den benötigten Methoden zur Manipulation –Ist ein transientes Objekt Attribut Methode order_nocust_infoline_itemsamount Hold CheckStatus Cancel Ship

© Prof. T. Kudraß, HTWK Leipzig Struktur eines Objekttyps Methodenrümpfe Public Interface Private Implementation Attributdeklarationen Methodenspezifikationen Spezifikation Rumpf

© Prof. T. Kudraß, HTWK Leipzig Spezifikation eines Objekttyps CREATE TYPE type_name AS OBJECT [(attribute1 datatype, attribute2 datatype,...] [MEMBER procedure1 | function1 spec, procedure2 | function2 spec,...)] CREATE TYPE type_name AS OBJECT [(attribute1 datatype, attribute2 datatype,...] [MEMBER procedure1 | function1 spec, procedure2 | function2 spec,...)] Syntax

© Prof. T. Kudraß, HTWK Leipzig Rumpf eines Objekttyps Syntax CREATE TYPE BODY type_name AS [MEMBER procedure1 | function1 body, procedure2 | function2 body,...] CREATE TYPE BODY type_name AS [MEMBER procedure1 | function1 body, procedure2 | function2 body,...]

© Prof. T. Kudraß, HTWK Leipzig Spezifikation eines Objekttyps (Beispiel) SQL> CREATE TYPE name_typ AS OBJECT( 2 f_name VARCHAR2(25), 3 l_name VARCHAR22(25), 4 initials varchar2(7), 5 MEMBER FUNCTION full_name return varchar2 6 PRAGMA RESTRICT_REFERENCES( full_name, 7 WNDS, WNPS, RNPS )); 1 2 Pragma: Zur Verhinderung von Seiteneffekten: WNDS Write No Database State WNPS Write No Package State RNPS Read No Package State

© Prof. T. Kudraß, HTWK Leipzig Rumpf eines Objekttyps (Beispiel) SQL> CREATE TYPE BODY name_typ AS 2 MEMBER FUNCTION full_name RETURN VARCHAR2 3 IS 4 BEGIN 5 RETURN (l_name || ' ' || f_name ); 6 END full_name; 7 END; 1

© Prof. T. Kudraß, HTWK Leipzig Spezifikation eines komplexen Objekt-Typs SQL> CREATE TYPE BODY emp_typ AS 2 MEMBER FUNCTION get_name RETURN VARCHAR2 3 IS 4 BEGIN 5 RETURN (name.l_name ||' '|| name.f_name ); 6 END; 7 MEMBER PROCEDURE set_l_name (v_name VARCHAR2) 8 IS 9 BEGIN 10 name.l_name := v_name; 11 END; 12 END;

© Prof. T. Kudraß, HTWK Leipzig Aufruf von Objektmethoden SQL>CREATE TABLE name_table OF name_typ; SQL>INSERT INTO name_table 2 VALUES('Marilyn','Monroe','MM'); SQL>SELECT nt.f_name,nt.name_typ.full_name() 2 FROM name_table nt;

© Prof. T. Kudraß, HTWK Leipzig Konstruktor-Methode SQL> CREATE TYPE tv_type AS OBJECT ( 2 tv_category VARCHAR2(20), 3 screen_size NUMBER(4)); DECLARE v_new_tv tv_type := tv_type('WEB tv', 32); v_alt_tv tv_type; BEGIN v_alt_tv := tv_type('Big Screen', 72); END; Hat den gleichen Namen wie der Typ, genutzt für die Initialisierung

© Prof. T. Kudraß, HTWK Leipzig Verwendung des Konstruktors BEGIN INSERT INTO person_tab VALUES(emp_typ(4567,'Christian','Bauwens',...)); END; BEGIN UPDATE person_tab p SET p = emp_typ(5678,'Charlie','Brown',...) WHERE p.l_name = 'Bauwens'; END;