9. Einführung in PL/SQL
|
|
|
- Johanna Sachs
- vor 10 Jahren
- Abrufe
Transkript
1 9. Einführung in PL/SQL Motivation für PL/SQL Aufbau von PL/SQL-Programmen Alternativen Steuerung des Programmablaufs Records Ausnahmebehandlung 215
2 Einwurf Oracle nutzt Transaktionssteuerung (wie alle echten ) Nutzer haben Gefühl, dass sie individuell arbeiten Vorstellung: Nutzer arbeiten auf lokalen Kopien erst mit Befehl COMMIT; werden Änderungen endgültig übernommen kommen mehrere Nutzer in Konflikt (gleiches Datum bearbeiten), findet DB Lösung (z. B. ein Nutzer muss warten) Fazit: Nach INSERT-Befehlen soll COMMIT; stehen 216
3 Erweiterung relationaler Einbettung von SQL in prozedurale oder objektorientierte Wirtssprachen (embedded SQL); meistens C, C++, oder Java (JDBC) Erweiterung von SQL um prozedurale Elemente innerhalb der SQL-Umgebung, PL/SQL (Procedural language extensions to SQL) Vorteile von PL/SQL: Bessere Integration der prozeduralen Elemente in die Datenbank; Nutzung in Prozeduren, Funktionen und Triggern 217
4 Warum Erweiterung von SQL sinnvoll ist keine prozeduralen Konzepte in SQL (Schleifen, Verzweigungen, Variablendeklarationen) viele Aufgaben nur umständlich über Zwischentabellen oder überhaupt nicht in SQL zu realisieren. Transitive Hülle Programme repräsentieren anwendungsspezifisches Wissen, das nicht in der Datenbank enthalten ist 218
5 Warum PL/SQL generell interessant ist PL/SQL erhöht die Funktionalität und Mächtigkeit von SQL- Anfragen Obwohl PL/SQL Oracle-spezifisch ist, können viele zentralen Ideen (z.b. Cursor) auch genutzt werden, wenn sie SQL in andere Programmiersprachen einbetten (z. B. Transact SQL für MS Server) Für Informatiker ist es uninteressant, welche Programmiersprache sie können, sie müssen aber die Fähigkeit haben, sich schnell in eine beliebige Sprache einzuarbeiten; PL/SQL ist ein gutes Beispiel, diese Fähigkeit zu prüfen 219
6 Anmerkungen zu PL/SQL in dieser Veranstaltung PL/SQL wird schrittweise erweitert, wir betrachten nur Basiskonzepte (z.b. zum Erstellen von Triggern) PL/SQL ist eine prozedurale Sprache, die sich an Ada anlehnt (z.b. strenge Typisierung), C-Kenntnisse helfen aber auch PL/SQL hat einen objekt-basierten -Ansatz, erlaubt die Aufteilung der Software in Packages In Oracle existieren einige Built-In-Packages, die hier nur am Rand betrachtet werden Achtung: PL/SQL wird kontinuierlich erweitert, ab und zu klappt nicht das, was einem logisch erscheint 220
7 Einschub: SEQUENCE und DUAL In Oracle gibt es keine Auto-Inkrement-Funktion, man kann aber spezielle Zähler (Sequenzen) definieren CREATE SEQUENCE mi INCREMENT BY 1; definiert eine Sequenz mi, die den Startwert und Inkrement 1 hat, durch den Aufruf mi.nextval, wird der Wert von mi zurück gegeben und um eins erhöht Nutzungsbeispiel: INSERT INTO Angestellte VALUES(mi.NEXTVAL, Meier,30); INSERT INTO Angestellte VALUES(mi.NEXTVAL, Mücke,25); Will man Informationen über verschiedene Werte von Oracle erfahren, kann man dazu die Dummy-Tabelle DUAL nutzen Beispiel: Anfrage einer Sequenz mit Erhöhung (ohne mi.currval) SELECT mi.nextval FROM DUAL; 221
8 Einstieg ohne DB (Hello World) CREATE OR REPLACE PROCEDURE Hello IS DBMS_OUTPUT.PUT_LINE('Hello World'); END Hello; 1. Zeile: Definition einer Prozedur (Parameter im nächsten Schritt) Zeile: Rumpf der Prozedur mit Ausgabebefehl Ausführung: EXECUTE Hello; 222
9 Anmerkung zur SW-Entwicklung DBMS_OUTPUT.PUT_LINE('...') ist Prozedur eines Zusatzpakets DBMS_OUTPUT und kann bei inhaltlicher Fehlersuche hilfreich sein beachten: 223
10 Aufbau einer PL/SQL-Prozedur oder Funktion CREATE OR REPLACE PROCEDURE <PName> (<Parameter>) IS <Variablenname> <VariablenTyp> <PL/SQL-Programmteile und SQL-Anfragen> EXCEPTION <Behandlung von Ausnahmen (optionaler Anteil)> END; CREATE OR REPLACE FUNCTION <FName> (<Parameter>) RETURN <Ergebnistyp> IS... (wie oben, aber mindestens ein Befehl RETURN <Ergebnis>) 224
11 Beispiel-Datenbank -- einfache Verwaltungstabelle CREATE TABLE ANGESTELLTE( Minr NUMBER(5), Name VARCHAR(10), Gehalt NUMBER(4), PRIMARY KEY (MiNr) ); -- einfache Kontrolltabelle CREATE TABLE PROTOKOLL( WER VARCHAR(10), WAS VARCHAR(10), WO VARCHAR(15), WEN VARCHAR(12), WANN DATE ); -- Zähler für Minr (ohne Test auf Obergrenze) CREATE SEQUENCE mi INCREMENT BY 1; 225
12 Einfache Einfüge-Prozedur CREATE OR REPLACE PROCEDURE EIN0 (N IN VARCHAR, G IN NUMBER) IS INSERT INTO ANGESTELLTE VALUES(mi.NEXTVAL,N,G); END; Prozeduren und Funktionen können Parameter haben für Parameter ist die Bearbeitungsart (IN OUT INOUT) anzugeben, bei Funktionen nur IN (ist default) bei VARCHAR und NUMBER-Parametern darf keine Formatangabe (Länge) übergeben werden In SQL-Statements können (einfache, d.h. keine Tabellen) Variablen referenziert werden 226
13 Einfüge-Prozedur mit Protokoll CREATE OR REPLACE PROCEDURE EIN1 (N IN VARCHAR, G IN NUMBER) IS mi_nummer NUMBER; /* USER_USERS ist Oracle-Tabelle mit Informationen über den aktuellen Nutzer (Name im Attribut USERNAME) */ NUTZER USER_USERS.USERNAME%TYPE; SELECT mi.nextval INTO mi_nummer FROM DUAL; INSERT INTO ANGESTELLTE VALUES(mi_Nummer,N,G); SELECT USER_USERS.USERNAME INTO NUTZER FROM USER_USERS; INSERT INTO PROTOKOLL VALUES(NUTZER,'EINFUEGEN', 'ANGESTELLTE',mi_Nummer,SYSDATE); END; 227
14 Ausführung SELECT * FROM Angestellte; SELECT * FROM Protokoll; EXECUTE EIN1('ich',42); SELECT * FROM Angestellte; SELECT * FROM Protokoll; Keine Zeilen gewählt Keine Zeilen gewählt anonymer Block abgeschlossen MINR NAME GEHALT ich 42 WER WAS WO WEN WANN SKLEUKER EINFUEGEN ANGESTELLTE
15 SQL in PL/SQL In PL/SQL sind grundsätzlich alle SQL DML-Befehle (SELECT, INSERT, UPDATE, DELETE) erlaubt für DDL-Befehle (CREATE, DROP) muss Zusatzpaket benutzt werden (hier nicht betrachtet) SELECT-Befehle müssen zusätzlich die INTO-Zeile haben und müssen genau ein Ergebnis liefern Mit Tabelle.Spaltenname%TYPE kann direkt auf den Typen einer Tabellenspalte zugegriffen werden Abfragen von Funktionswerten oder Sequenz-Werten werden immer auf die Dummy-Tabelle DUAL bezogen USER_USERS ist eine der Systemtabellen 229
16 Alternativen CREATE TABLE Gehaltsklassen( INSERT INTO Gehaltsklassen VALUES('A',0); klasse VARCHAR(1), INSERT INTO Gehaltsklassen VALUES('B',0); anzahl NUMBER(3) INSERT INTO Gehaltsklassen VALUES('C',0); ); CREATE OR REPLACE PROCEDURE EIN (N IN VARCHAR, G IN NUMBER) IS INSERT INTO ANGESTELLTE VALUES(mi.NEXTVAL mi.nextval,n,g); IF G>90 THEN UPDATE Gehaltsklassen SET anzahl=anzahl+1 WHERE klasse='a'; DBMS_OUTPUT.PUT_LINE('In Klasse A eingefuegt'); ELSIF G>60 THEN UPDATE Gehaltsklassen SET anzahl=anzahl+1 WHERE klasse='b'; DBMS_OUTPUT.PUT_LINE('In Klasse B eingefuegt'); END; ELSE UPDATE Gehaltsklassen SET anzahl=anzahl+1 WHERE klasse='c'; END IF; END; 230
17 Strukturierung des Ablaufs Alternativen werden durch die IF-THEN-ELSIF- ELSIF-...-ELSE-END IF Konstruktion beschrieben Wird eine Bedingung nach undefiniert ausgewertet, wird in den ELSE-Zweig gesprungen Grundsätzlich können in PL/SQL-Rümpfen weitere PL/SQL- Blöcke definiert werden weitere Blöcke dienen zur Strukturierung der Programme und sind hilfreich bei der Reaktion auf Ausnahmen (Fehlerfälle) Es gibt die Anweisung NULL; (steht für den leeren Befehl) Die üblichen Regeln für Sichtbarkeiten von Variablen werden übernommen (sollten bei guter Programmierung keine Rolle spielen) 231
18 Schleifen (Beispiele) CREATE OR REPLACE PROCEDURE FREMD0 (Anzahl NUMBER, Firma VARCHAR, Gehalt NUMBER) IS FOR i IN 1.. Anzahl LOOP EIN(Firma i, Gehalt); END LOOP; END; CREATE OR REPLACE PROCEDURE FREMD (Anzahl NUMBER, Firma VARCHAR, Gehalt NUMBER) IS i INTEGER DEFAULT 1; WHILE i<=anzahl LOOP EIN(Firma i, Gehalt); i:=i+1; END LOOP; END; 232
19 Übersicht - Schleifen Simple LOOP: LOOP... END LOOP; WHILE LOOP: WHILE <bedingung> LOOP... END LOOP; Numeric FOR LOOP: FOR <loop_index> IN [REVERSE] <Anfang>.. <Ende> LOOP END LOOP; Die Variable <loop_index> wird dabei automatisch als INTEGER deklariert. EXIT [WHEN <bedingung>]: LOOP Verlassen (ist aber schlechter Programmierstil) 233
20 Zugriffsrechte bei Prozeduren / Funktionen Benutzungsrechte vergeben: GRANT EXECUTE ON <procedure/function> TO <user>; Prozeduren und Funktionen werden jeweils mit den Zugriffsrechten des Besitzers ausgeführt d.h. der Nutzer kann die Prozedur/Funktion auch dann aufrufen, wenn er kein Zugriffsrecht auf die dabei benutzten Tabellen hat Rechtesteuerung in späteren VL Anmerkung: Sieht man PL/SQL als serverseitige Programmierung, ist dies ein zentrales Argument für PL/SQL 234
21 Records Ein RECORD enthält mehrere Felder, entspricht einem Tupel in der Datenbasis: TYPE Citytype IS RECORD( Name City.Name%TYPE, Country VARCHAR(4), Province VARCHAR(32), Population NUMBER, Longitude NUMBER, Latitude NUMBER ); Nutzung (Deklaration einer Variablen diesen Typs): thecity Citytype; Semantisch verhalten sich RECORD wie struct in C (kein direkter Vergleich, direkte Zuweisung möglich, bei Zuweisung werden Werte kopiert) 235
22 Etwas Semantikanalyse (1/2) CREATE OR REPLACE PROCEDURE RecordTest IS TYPE T1 IS RECORD( X NUMBER, Y NUMBER ); TYPE T2 IS RECORD( X NUMBER, Y NUMBER ); A T1; B T1 DEFAULT A; C T2; A.x:=1; A.y:=2; -- DBMS_OUTPUT.PUT_LINE(A); geht nicht DBMS_OUTPUT.PUT_LINE('A.x= ' A.x); DBMS_OUTPUT.PUT_LINE('A.y= ' A.y); DBMS_OUTPUT.PUT_LINE('B.x= ' B.x); DBMS_OUTPUT.PUT_LINE('B.y= ' B.y); Ausgabe: A.x= 1 A.y= 2 B.x= B.y= -- DBMS_OUTPUT.PUT_LINE(B.y); liefert leere Zeile! 236
23 Etwas Semantikanalyse (2/2) B.x:=1; B.y:=2; -- IF A=B ist verboten IF A.x=B.x AND A.y=B.y THEN DBMS_OUTPUT.PUT_LINE('A gleich B'); ELSE DBMS_OUTPUT.PUT_LINE('A ungleich B'); END IF; A:=B; B.x:=2; IF A.x=B.x AND A.y=B.y THEN DBMS_OUTPUT.PUT_LINE('A gleich B'); ELSE DBMS_OUTPUT.PUT_LINE('A ungleich B'); END IF; -- nicht erlaubt C:=A; END; Ausgabe: A gleich B A ungleich B 237
24 Ausnahmen (1/5) Declaration Section: Deklaration (der Namen) benutzerdefinierter Exceptions. [DECLARE] <exception_name> EXCEPTION; Exceptions können dann an beliebigen Stellen des PL/SQL- Blocks durch RAISE ausgelöst werden. IF <condition> THEN RAISE <exception_name>; Exception Section: Definition der beim Auftreten einer Exception auszuführenden Aktionen. WHEN <exception_name> THEN <PL/SQL-Statement>; WHEN OTHERS THEN <PL/SQL-Statement>; 238
25 Ausnahmen (2/5) auslösen einer Exception entsprechende Aktion der WHEN-Klausel ausführen innersten Block verlassen (oft Anwendung von anonymen Blöcken sinnvoll) ohne Exception mit gefangener Exception ohne gefangene Exception PROCEDURE PROCEDURE PROCEDURE EXCEPTION END EXCEPTION END EXCEPTION END 239
26 Ausnahmen (3/5) CREATE OR REPLACE FUNCTION noheinz(name VARCHAR) RETURN VARCHAR IS heinz EXCEPTION; IF name='heinz' THEN RAISE heinz; ELSE RETURN name; END IF; END; / Egon Wat nu? 4! CREATE OR REPLACE PROCEDURE heinztest IS heinz EXCEPTION; DBMS_OUTPUT.PUT_LINE(noHeinz('Egon')); DBMS_OUTPUT.PUT_LINE(noHeinz('Heinz')); DBMS_OUTPUT.PUT_LINE(noHeinz('Udo')); EXCEPTION WHEN heinz THEN DBMS_OUTPUT.PUT_LINE('Ein Heinz'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Wat nu?'); END; / EXECUTE heinztest; 3 SELECT noheinz('heinz') FROM DUAL; SELECT noheinz('heinz') FROM DUAL FEHLER in Zeile 1: ORA-06510: PL/SQL: Unbehandelte benutzerdefinierte Ausnahmebedingung (exception exception) ORA : in SKLEUKER.NOHEINZ", Zeile
27 Ausnahmen (4/5) Es gibt viele vordefinierte Ausnahmen, die alle abgeprüft und bearbeitet werden können, Beispiele: NO_DATA_FOUND TOO_MANY_ROWS INVALID_CURSOR ZERO_DIVIDE DUP_VAL_ON_INDEX Ausnahmen können auch direkt ausgelöst werden: RAISE_APPLICATION_ERROR(-20101, 'Kunde nicht kreditwürdig'); Die Werte dieser Ausnahmen müssen zwischen und liegen, Rest ist für Oracle 241
28 Ausnahmen (5/5) CREATE OR REPLACE PROCEDURE extest IS I INTEGER DEFAULT 0; I:=I/I; DBMS_OUTPUT.PUT_LINE('Nicht Erreicht'); EXCEPTION WHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE('' SQLCODE '::' SQLERRM); END; DBMS_OUTPUT.PUT_LINE('' SQLCODE '::' SQLERRM); RAISE_APPLICATION_ERROR(-20101,'keine Lust mehr'); EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('' SQLCODE '::' SQLERRM); IF SQLCODE= THEN DBMS_OUTPUT.PUT_LINE('stimmt nicht'); END IF; END; -1476::ORA 1476::ORA-01476: Divisor ist Null / 0::ORA-0000: 0000: normal, successful completion EXECUTE extest; ::ORA 20101::ORA-20101: keine Lust mehr stimmt nicht 242
29 10. Cursor und Trigger in PL/SQL Definition eines Cursor Einsatzmöglichkeiten von Cursorn Verschiedene Arten von Triggern Hinweis: Oracle-Bibliothek (als eine Sammlung herunterladbar) 243
30 RECORD und %ROWTYPE CREATE OR REPLACE PROCEDURE gehaltanpassen ( mi Angestellte.MiNr%TYPE) IS person Angestellte%ROWTYPE; SELECT * INTO person FROM Angestellte WHERE Angestellte.MiNr=mi; UPDATE Angestellte SET Gehalt=person.Gehalt WHERE Name=person.Name; END; CREATE TABLE ANGESTELLTE( Minr NUMBER(5), Name VARCHAR(10), Gehalt NUMBER(4), PRIMARY KEY (MiNr) ); Mit %ROWTYPE erhält man einen RECORD-Typen, der sich genau aus den Attributen der genannten Tabelle zusammensetzt. Variablen dieses Typs können dann eine Zeile der Tabelle aufnehmen 244
31 Cursorbasierter DB-Zugriff Zeilenweiser Zugriff auf eine Relation aus einem PL/SQL- Programm Cursordeklaration in der Declaration Section: CURSOR <cursor-name> [(<parameter-list>)] IS <select-statement>; (<parameter-list>): Parameter-Liste, nur IN als Übergaberichtung erlaubt Zwischen SELECT und FROM auch PL/SQL-Variablen und PL/SQL-Funktionen. PL/SQL-Variablen können ebenfalls in den WHERE-, GROUP- und HAVING-Klauseln verwendet werden 245
32 Beispiel für Cursor-Definition Alle Städte in dem in der Variablen thecountry angegebenen Land: CURSOR cities_in(thecountry Country.Code%TYPE) IS SELECT City.Name FROM City WHERE City.Country=theCountry; Erinnerung: Tabelle City (vereinfacht): Country D D Name Cologne Hamburg 246
33 OPEN OPEN <cursor-name> [(<argument-list>)]; das SELECT-Statement des CURSORS wird jetzt ausgeführt das Ergebnis ist eine virtuelle Tabelle im Speicher auf diese Tabelle kann nur zeilenweise zugegriffen werden die aktuelle Zeile wird durch ein FETCH-Kommando eingelesen, wobei der CURSOR automatisch ein Feld weiter gesetzt wird Name OPEN cities_in('d'); = virtuell im Speicher = zugreifbar Cologne Hamburg Munich FETCH 247
34 FETCH FETCH <cursor-name> INTO <record-variable>; oder FETCH <cursor-name> INTO <variable-list>; bewegt Cursor auf nächste Zeile des Ergebnisses der Anfrage und kopiert diese in die angegebene Record-Variable oder Variablenliste mit <cursor-name>%rowtype kann auf Record-Typ zugegriffen werden: <variable> <cursor-name>%rowtype; CLOSE <cursor-name>; schließt einen Cursor (wichtig!!!) nicht möglich: OPEN cities_in ('D'); OPEN cities_in ('CH'); FETCH cities_in INTO <variable>; ein parametrisierter Cursor, nicht eine Familie von Cursoren 248
35 Attribute von Cursorn <cursor-name>%isopen : Cursor offen? <cursor-name>%found : Solange ein Cursor bei der letzten FETCH-Operation ein neues Tupel gefunden hat, ist <cursor-name>%found = TRUE <cursor-name>%notfound: TRUE wenn man alle Zeilen eines Cursors gefetcht hat. <cursor-name>%rowcount : Anzahl der von einem Cursor bereits gelesenen Tupel. Attribute nicht innerhalb eines SQL-Ausdrucks verwendbar (gehören zu Ablaufsteuerungsmöglichkeiten in PL/SQL) 249
36 Cursor Beispiel (1/2) -- Nutzung von WHILE CREATE OR REPLACE PROCEDURE teureleute (betr Number) IS CURSOR viel (betrag Number) IS SELECT * FROM Angestellte WHERE Angestellte.Gehalt>=betrag; zeile viel%rowtype; OPEN viel(betr); FETCH viel INTO zeile; WHILE viel%found LOOP DBMS_OUTPUT.PUT_LINE(zeile.Name ' bekommt zu viel! (mindestens ' betr ')'); FETCH viel INTO zeile; END LOOP; CLOSE viel; END; 250
37 Cursor FOR LOOP FOR <record_index> IN <cursor-name> LOOP... END LOOP; <record_index> wird dabei automatisch als Variable vom Typ <cursor-name>%rowtype deklariert, <record_index> immer von einem Record-Type ggf. einspaltig (bei Zugriff beachten). es wird automatisch ein OPEN ausgeführt bei jeder Ausführung des Schleifenkörpers wird automatisch ein FETCH ausgeführt, Schleifenkörper enthält i.a. keinen FETCH-Befehl am Ende wird automatisch ein CLOSE ausgeführt Spalten müssen explizit adressiert werden 251
38 Cursor Beispiel (2/2) -- Nutzung der CURSOR-FOR-Schleife CREATE OR REPLACE PROCEDURE teureleute0(betr Number) IS CURSOR viel (betrag Number) IS SELECT * FROM Angestellte WHERE Angestellte.Gehalt>=betrag; FOR person IN viel(betr) END; LOOP DBMS_OUTPUT.PUT_LINE(person.Name ' verdient END LOOP; zu viel! (mindestens ' betr ')'); 252
39 Aufdatieren an CURSOR-Position CREATE OR REPLACE Procedure mehrfueralteleute IS CURSOR alt IS SELECT * FROM Angestellte WHERE MiNr<100 FOR UPDATE; FOR person IN alt LOOP UPDATE Angestellte SET Gehalt=Gehalt*1.1 WHERE CURRENT OF alt; END LOOP; END; Um Veränderungen an der aktuellen CURSOR-Position vornehmen zu können, kann die Bedingung WHERE CURRENT OF <CURSOR- Name> genutzt werden, CURSOR muss zum ändern markiert sein Beispiel: Gehaltserhöhung um 10% bei allen Leuten deren MiNr kleiner als 100 ist 253
40 Trigger (1/2) spezielle Form von PL/SQL-Prozeduren werden beim Eintreten eines bestimmten Ereignisses ausgeführt Spezialfall aktiver Regeln nach dem Event-Condition-Action- Paradigma Werden einer Tabelle (oft auch noch einer bestimmten Spalte) zugeordnet Bearbeitung wird durch das Eintreten eines Ereignisses (Einfügen, Ändern oder Löschen von Zeilen der Tabelle) ausgelöst (Event) 254
41 Trigger (2/2) Ausführung von Bedingungen an den Datenbankzustand abhängig (Condition) Action: vor oder nach der Ausführung der entsprechenden aktivierenden Anweisung ausgeführt einmal pro auslösender Anweisung (Statement-Trigger) oder einmal für jede betroffene Zeile (Row-Trigger) ausgeführt Trigger-Aktion kann auf den alten und neuen Wert der gerade behandelten Zeile zugreifen 255
42 Syntax von Triggern (1/2) CREATE [OR REPLACE] TRIGGER <trigger-name> BEFORE AFTER {INSERT DELETE UPDATE} [OF <column-list>] [ OR {INSERT DELETE UPDATE} [OF <column-list>]]... [ OR {INSERT DELETE UPDATE} [OF <column-list>]] ON <table> [FOR EACH ROW] [WHEN (<condition>)] <pl/sql-block>; 256
43 Syntax von Triggern (2/2) BEFORE, AFTER: Trigger wird vor/nach der auslösenden Operation ausgeführt OF <column> (nur für UPDATE) schränkt Aktivierung auf angegebene Spalte ein Zugriff auf Zeileninhalte vor und nach der Ausführung der aktivierenden Aktion mittels :OLD bzw. :NEW (Aliasing durch REFERENCING OLD AS... NEW AS... ). Schreiben in :NEW-Werte nur mit BEFORE-Trigger. FOR EACH ROW: Row-Trigger, sonst Statement-Trigger. WHEN (<condition>) : zusätzliche Bedingung :OLD und :NEW sind in <condition> erlaubt. 257
44 Beispiel für Trigger (1/5) Wenn ein Landes-Code geändert wird, pflanzt sich diese Änderung auf die Relation Province fort: CREATE OR REPLACE TRIGGER change_code BEFORE UPDATE OF Code ON Country FOR EACH ROW UPDATE Province SET Country = :NEW.Code WHERE Country = :OLD.Code; END; 258
45 Beispiel für Trigger (2/5) Wenn ein Land neu angelegt wird, wird ein Eintrag in Politics mit dem aktuellen Jahr erzeugt: CREATE TRIGGER new_country AFTER INSERT ON Country FOR EACH ROW INSERT INTO Politics (Country,Independence) VALUES (:NEW.Code,SYSDATE); END; Hinweis: Eventuell benötigte Variablen werden zwischen FOR EACH ROW und nach dem Schlüsselwort DECLARE definiert 259
46 Beispiel für Trigger (3/5) Nachmittags dürfen keine Städte gelöscht werden: CREATE OR REPLACE TRIGGER nachm_nicht_loeschen BEFORE DELETE ON City IF TO_CHAR(SYSDATE,'HH24:MI') BETWEEN '12:00' AND '18:00' THEN RAISE_APPLICATION_ERROR END IF; END; (-20101,'Unerlaubte Aktion'); Mit RAISE_APPLICATION_ERROR wird ein Fehler erzeugt, der zum Abbruch führt. Der erste Parameter muss zwischen und liegen, der zweite ist der Fehlertext 260
47 Beispiel für Trigger (4/5) Niemand darf anfänglich mehr als die Meiers in der Firma verdienen CREATE OR REPLACE TRIGGER nichtmehralsmeiers BEFORE INSERT ON Angestellte FOR EACH ROW DECLARE maxmeier NUMBER; SELECT MAX(Gehalt) INTO maxmeier FROM Angestellte WHERE Name='Meier'; IF :NEW.Gehalt>maxMeier THEN RAISE_APPLICATION_ERROR(-20111, 'Nicht mehr als die Meiers'); END IF; END; 261
48 Beispiel für Trigger (5/5) Niemand darf anfänglich mehr als die Meiers in der Firma verdienen CREATE OR REPLACE TRIGGER nichtmehralsmeiers AFTER INSERT ON Angestellte DECLARE verboten INTEGER; SELECT COUNT(*) INTO verboten FROM Angestellte WHERE Angestellte.Gehalt > (SELECT MAX(Gehalt) FROM Angestellte WHERE Name='Meier'); IF verboten > 0 THEN RAISE_APPLICATION_ERROR(-20111, 'Nicht mehr als die Meiers'); END IF; END; nicht äquivalent zu vorher: - was wenn neuer Mitarbeiter Meier heißt - was bei update dann insert 262
49 FOR EACH ROW oder nicht CREATE TABLE Tr( X NUMBER, Y NUMBER ); INSERT INTO Tr VALUES (1,3); INSERT INTO Tr VALUES (1,4); INSERT INTO Tr VALUES (1,5); SELECT * FROM Tr; CREATE TRIGGER TrOhneEach BEFORE UPDATE ON Tr DBMS_OUTPUT.PUT_LINE('TrOhneEach'); END; / CREATE TRIGGER TrMitEach BEFORE UPDATE ON Tr FOR EACH ROW DBMS_OUTPUT.PUT_LINE('TrMitEach'); END; / UPDATE TR SET Y=Y+1 WHERE X=1; SELECT * FROM Tr; X Y Zeilen ausgewählt. Trigger wurde erstellt. Trigger wurde erstellt. TrOhneEach TrMitEach TrMitEach TrMitEach 3 Zeilen wurden aktualisiert. X Y Zeilen ausgewählt. 263
50 Problem der Mutating Tables (1/2) Trigger können die Inhalte von Tabellen ändern (der Tabelle, auf der sie definiert sind und andere), d.h. jede Ausführung des Triggers sieht eventuell einen anderen Datenbestand der Tabelle, auf der er definiert ist, sowie der Tabellen, die er evtl. ändert d.h. Ergebnis abhängig von der Reihenfolge der veränderten Tupel ORACLE: Betroffene Tabellen werden während der gesamten Aktion als mutating gekennzeichnet, können nicht erneut von Triggern gelesen oder geschrieben werden Nachteil: Oft ein zu strenges Kriterium 264
51 Problem der Mutating Tables (2/2) Trigger soll auf Tabelle zugreifen, auf der er selber definiert ist nur das auslösende Tupel soll von dem Trigger gelesen/geschrieben werden: Verwendung eines BEFORE-Triggers und der :NEW- und :OLD-Variablen es sollen neben dem auslösenden Tupel auch weitere Tupel verändert werden: Verwendung eines Statementorientierten Triggers Trigger soll auf andere Tabellen zugreifen: Verwendung von Statement-Triggern und ggf. Hilfstabellen 265
52 Beispiel (1/4): Aufgabe Tabelle speichert Gebote eines Mitglieds (mnr) für eine Ware (ware) als Preis (gebot) Forderung: bei neuen Geboten (insert oder update erlaubt) für die gleiche Ware muss das Gebot erhöht werden CREATE TABLE Gebot( ); mnr INTEGER, ware INTEGER, gebot NUMBER(8,2), PRIMARY KEY(mnr,ware,gebot) 266
53 Beispiel (2/4) : Trigger CREATE OR REPLACE TRIGGER GEBOTERHOEHEN BEFORE INSERT OR UPDATE ON GEBOT FOR EACH ROW DECLARE maxi Gebot.gebot%TYPE; SELECT MAX (Gebot.gebot) INTO maxi FROM Gebot WHERE Gebot.mnr = :NEW.mnr AND Gebot.ware = :NEW.ware; IF maxi IS NOT NULL AND maxi >= :NEW.Gebot THEN RAISE_APPLICATION_ERROR(-20900,'Gebot muss erhoeht werden'); END IF; END; 267
54 Beispiel (3/4): Versuch der Anwendung INSERT INTO Gebot VALUES(42,99,1.00); 1 Zeilen eingefügt. COMMIT; festgeschrieben. UPDATE Gebot SET gebot = 1.01 WHERE mnr = 42 AND ware = 99; SQL-Fehler: ORA-04091: table ICH.GEBOT is mutating, trigger/function may not see it ORA-06512: at "ICH.GEBOTERHOEHEN", line 4 ORA-04088: error during execution of trigger 'ICH.GEBOTERHOEHEN' "table %s.%s is mutating, trigger/function may not see it" 268
55 Beispiel (4/4): Korrektur CREATE OR REPLACE TRIGGER GEBOTERHOEHEN BEFORE INSERT OR UPDATE ON GEBOT FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; maxi Gebot.gebot%TYPE; Korrektur sinnvoll, da nur ursprüngliche Daten gelesen und sonst nichts verändert wird auch PRAGMA kann zur Laufzeit scheitern Erinnerung: Transaktionen mit COMMIT abschließen 269
Prozedurale Datenbank- Anwendungsprogrammierung
Idee: Erweiterung von SQL um Komponenten von prozeduralen Sprachen (Sequenz, bedingte Ausführung, Schleife) Bezeichnung: Prozedurale SQL-Erweiterung. In Oracle: PL/SQL, in Microsoft SQL Server: T-SQL.
Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München
Kapitel 4 Dynamisches SQL Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München 2008 Thomas Bernecker, Tobias Emrich unter Verwendung der Folien des Datenbankpraktikums aus dem Wintersemester
Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement
Funktion definieren Gibt Summe der Gehälter zurück Aufruf in einem SQL-Statement Dr. Christian Senger Einführung PL/SQL 1 Procedures & Transaktionen CREATE OR REPLACE PROCEDURE write_log ( log_code IN
Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL
Betreuer: Sascha Kriewel, Tobias Tuttas Raum: LF 230 Bearbeitung: 26., 27. und 29. Juni 2006 Datum Team (Account) Vorbereitung Präsenz Aktuelle Informationen, Ansprechpartner und Material unter: http://www.is.inf.uni-due.de/courses/dbp_ss07/index.html
Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009
Hochschule Darmstadt DATENBANKEN Fachbereich Informatik Praktikum 3 Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum: 11.09.2009 PL/SQL Programmierung Anwendung des Cursor Konzepts und Stored Procedures Und Trigger
Gesicherte Prozeduren
Gesicherte Prozeduren Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln zurückgeliefert.
Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.
Mengenvergleiche: Mehr Möglichkeiten als der in-operator bietet der θany und der θall-operator, also der Vergleich mit irgendeinem oder jedem Tupel der Unteranfrage. Alle Konten außer das, mit dem größten
Informatik 12 Datenbanken SQL-Einführung
Informatik 12 Datenbanken SQL-Einführung Gierhardt Vorbemerkungen Bisher haben wir Datenbanken nur über einzelne Tabellen kennen gelernt. Stehen mehrere Tabellen in gewissen Beziehungen zur Beschreibung
Ein Ausflug zu ACCESS
Ein Ausflug zu ACCESS Die folgenden Folien zeigen beispielhaft, wie man sein DB- Wissen auf ACCESS übertragen kann betrachtet wird ACCESS 2002, da gerade im Bereich der Nutzung von SQL hier einiges nachgearbeitet
2. Datenbank-Programmierung
2. Datenbank-Programmierung SQL ist eingeschränkt bezüglich der algorithmischen Mächtigkeit, z.b. Berechnung einer transitiven Hülle ist in Standard-SQL nicht möglich. Die Einschränkung ist von Bedeutung
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5
Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov. 2006 M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5 Aufgabe 1: Projektion Datenbanksysteme I π A1,...,A n (π B1,...,B
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER
DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER INHALTSVERZEICHNIS 1. Datenbanken 2. SQL 1.1 Sinn und Zweck 1.2 Definition 1.3 Modelle 1.4 Relationales Datenbankmodell 2.1 Definition 2.2 Befehle 3.
3. Stored Procedures und PL/SQL
3. Stored Procedures und PL/SQL Wenn eine Anwendung auf einer Client-Maschine läuft, wird normalerweise jede SQL-Anweisung einzeln vom Client an den Server gesandt, und jedes Ergebnistupel wird einzeln
Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz
Oracle 12c: Neuerungen in PL/SQL Roman Pyro DOAG 2014 Konferenz Herrmann & Lenz Services GmbH Herrmann & Lenz Solutions GmbH Erfolgreich seit 1996 am Markt Firmensitz: Burscheid (bei Leverkusen) Beratung,
Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin
Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin PhpMyAdmin = grafsches Tool zur Verwaltung von MySQL-Datenbanken Datenbanken erzeugen und löschen Tabellen und Spalten einfügen,
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Java Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
6. Datenintegrität. Integritätsbedingungen
6. Integritätsbedingungen dienen zur Einschränkung der Datenbankzustände auf diejenigen, die es in der realen Welt tatsächlich gibt. sind aus dem erstellten Datenmodell ableitbar (semantisch) und können
Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel
Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel Schlagworte Autor: Klaus Friemelt, MT AG dynamisches BULK SQL, VARCHAR2-indizierte PL/SQL-Tabellen Einleitung Mit den letzten
Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und 2005. combit GmbH Untere Laube 30 78462 Konstanz
combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager Datensatzhistorie mit dem SQL Server 2000 und 2005 Datensatzhistorie mit dem SQL Server 2000 und 2005-2 - Inhalt
WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R 1.008. Vorlesung #6. SQL (Teil 4)
Vorlesung #6 SQL (Teil 4) Fahrplan Besprechung der Übungsaufgaben Einschub: Self Joins (relevant fürs Praktikum) Dynamische Intergritätsbedingungen, das Trigger - Konzept von Oracle Prozedurale Erweiterungen,
5.3 Datenänderung/-zugriff mit SQL (DML)
5.3 Datenänderung/-zugriff mit SQL (DML) Hinweis: - DML-Anweisungen sind mengenorientiert - Mit einer Anweisungen kann mehr als ein Tupel eingefügt, geändert, gelöscht oder gelesen werden Benutzungs- und
Excel Funktionen durch eigene Funktionen erweitern.
Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion
Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.
Datenintegrität Arten von Integritätsbedingungen Statische Integritätsbedingungen Referentielle Integrität Integritätsbedingungen in SQL Trigger 1 Datenintegrität Einschränkung der möglichen Datenbankzustände
Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11
Datenbanksysteme WS 05/ 06 Gruppe 12 Martin Tintel Tatjana Triebl Seite 1 von 11 Inhaltsverzeichnis Inhaltsverzeichnis... 2 1. Einleitung... 3 2. Datenbanken... 4 2.1. Oracle... 4 2.2. MySQL... 5 2.3 MS
Datenintegrität. Bisherige Integritätsbedingungen
Datenintegrität Integitätsbedingungen chlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Bedingungen an den Zustand der Datenbasis dynamische Bedingungen an Zustandsübergänge
Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:
VBA Programmierung mit Excel Schleifen 1/6 Erweiterung der Aufgabe Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen: Es müssen also 11 (B L) x 35 = 385 Zellen berücksichtigt
SQL (Structured Query Language) Schemata Datentypen
2 SQL Sprachelemente Grundlegende Sprachelemente von SQL. 2.1 Übersicht Themen des Kapitels SQL Sprachelemente Themen des Kapitels SQL (Structured Query Language) Schemata Datentypen Im Kapitel SQL Sprachelemente
Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen
Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen ist die wichtigste Aufgabe des DB-Administrators!
Views in SQL. 2 Anlegen und Verwenden von Views 2
Views in SQL Holger Jakobs [email protected], [email protected] 2010-07-15 Inhaltsverzeichnis 1 Wozu dienen Views? 1 2 Anlegen und Verwenden von Views 2 3 Schreibfähigkeit von Views 3 3.1 Views schreibfähig
Universität Stuttgart Abteilung Anwendersoftware 01.07.2002. - Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures
SQLJ Basics Universität Stuttgart Abteilung Anwendersoftware 01.07.2002 Was ist SQLJ? SQLJ Part 0: - Steht für Embedded SQL in Java SQLJ Part 1: - Java-Methoden als SQL Stored-Procedures SQLJ Part 2: -
desk.modul : WaWi- Export
desk.modul : WaWi- Export Die Schnittstelle besteht aus einem Programm, welches die Daten aus der OfficeLine ausliest und in eine XML-Datei exportiert. Die Schnittstelle ist als ein eigenständiges Programm
Referentielle Integrität
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
SEMINAR Modifikation für die Nutzung des Community Builders
20.04.2010 SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung ecktion SEMINAR Modifikation für die Nutzung des Community Builders Step by Step Anleitung Bevor Sie loslegen
Referentielle Integrität
Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung statische Integritätsbedingungen Bedingungen an den Zustand der Datenbasis dynamische
Arbeit mit zusammengesetzten Datentypen
Arbeit mit zusammengesetzten Datentypen Zusammengesetzte Datentypen Typen: PL/SQL RECORDS PL/SQL TABELLEN Enthalten interne Komponenten Sind wiederverwendbar Copyright Oracle Corporation, 1998. All rights
Suche schlecht beschriftete Bilder mit Eigenen Abfragen
Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere
Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS 2015. Metadaten
Fakultät für Informatik & Wirtschaftsinformatik Metadaten Metadaten sind Daten über Daten Data-Dictionary speichert Informationen über die Struktur der Daten, z.b.: Tabellen, Spalten, Datentypen Primär-
Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)
Nachtrag: Farben Farbblindheit (Light und Bartlein 2004) 1 Vorgeschlagene Farbskalen (Light and Bartlein 2004) Farbkodierung metrisch skalierter Daten Unterscheide: 1. Sequential Data (ohne Betonung der
Datenbanken für Online Untersuchungen
Datenbanken für Online Untersuchungen Im vorliegenden Text wird die Verwendung einer MySQL Datenbank für Online Untersuchungen beschrieben. Es wird davon ausgegangen, dass die Untersuchung aus mehreren
Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6
Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6 Aufgabe 1: Pareto mit SV-Semantik Suchmaschinen Pareto Definition: x < P
Speichern. Speichern unter
Speichern Speichern unter Speichern Auf einem PC wird ständig gespeichert. Von der Festplatte in den Arbeitspeicher und zurück Beim Download Beim Kopieren Beim Aufruf eines Programms Beim Löschen Beim
10.6 Programmier-Exits für Workitems
10.6 Programmier-Exits für Workitems 279 10.6 Programmier-Exits für Workitems 10.6.1 Das Interface IF_SWF_IFS_WORKITEM_EXIT Am Schritt einer Workflow-Definition im Reiter»Programmier-Exits«können verschiedene
Fachhochschule Deggendorf Platzziffer:...
Sommersemester 2008 Zahl der Blätter: 9 Fachbereich: Betriebswirtschaft WI Bachelor Hilfsmittel: alles ohne Computer Zeit: 90 Minuten 1 Betrachten Sie die drei markierten Zeilen. 1. Angenommen Sie hätten
Urlaubsregel in David
Urlaubsregel in David Inhaltsverzeichnis KlickDown Beitrag von Tobit...3 Präambel...3 Benachrichtigung externer Absender...3 Erstellen oder Anpassen des Anworttextes...3 Erstellen oder Anpassen der Auto-Reply-Regel...5
SQL: statische Integrität
SQL: statische Integrität.1 SQL: statische Integrität Im allgemeinen sind nur solche Instanzen einer Datenbank erlaubt, deren Relationen die der Datenbank bekannten Integritätsbedingungen erfüllen. Integritätsbedingungen
Labor 3 - Datenbank mit MySQL
Labor 3 - Datenbank mit MySQL Hinweis: Dieses Labor entstand z.t. aus Scripten von Prof. Dr. U. Bannier. 1. Starten des MySQL-Systems MySQL ist ein unter www.mysql.com kostenlos erhältliches Datenbankmanagementsystem.
mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007
6. Übung zur Vorlesung Datenbanken im Sommersemester 2007 mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007 Aufgabe 1: Rekursion Betrachten Sie die folgende Tabelle
Updatehinweise für die Version forma 5.5.5
Updatehinweise für die Version forma 5.5.5 Seit der Version forma 5.5.0 aus 2012 gibt es nur noch eine Office-Version und keine StandAlone-Version mehr. Wenn Sie noch mit der alten Version forma 5.0.x
Hochschule Karlsruhe Technik und Wirtschaft- 10.7.2013. Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.
Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Datenbanken und Informationssysteme II Szenario: Projektverwaltung. Es gibt Projekte, Projektleiter, Mitarbeiter und ihre Zuordnung zu Projekten.
Übungsblatt 8- Lösungsvorschlag
Universität Innsbruck - Institut für Informatik Prof. Günther Specht, R.Binna, N.Krismer, M. Tschuggnall 30. November 2012 Proseminar Datenbanksysteme Übungsblatt 8- Lösungsvorschlag Aufgabe 1 (Trigger)
Einführung in PL/SQL
Einführung in PL/SQL Procedural Language/Structured Query Language Prozedurale Erweiterung der Sprache SQL für Elemente wie Variablen, Schleifen, Bedingungen, Ausnahmebehandlung Dr. Christian Senger Einführung
SQL für Trolle. mag.e. Dienstag, 10.2.2009. Qt-Seminar
Qt-Seminar Dienstag, 10.2.2009 SQL ist......die Abkürzung für Structured Query Language (früher sequel für Structured English Query Language )...ein ISO und ANSI Standard (aktuell SQL:2008)...eine Befehls-
Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung
6. Datenintegrität Motivation Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung nur sinnvolle Attributwerte (z.b. keine negativen Semester) Abhängigkeiten
C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet
C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()
Options- und Freitext-Modul Update-Anleitung
Options- und Freitext-Modul Update-Anleitung Hinweis... 2 Update für Versionen kleiner als 1.2.4 auf 1.3.x... 3 Update für Versionen ab 1.2.4 auf 1.3.x... 6 Update für Versionen ab 1.3.x auf 2.x.x... 7
Vorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
Client-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
Fachbericht zum Thema: Anforderungen an ein Datenbanksystem
Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank
Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken
Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen
IBIS Professional. z Dokumentation zur Dublettenprüfung
z Dokumentation zur Dublettenprüfung Die Dublettenprüfung ist ein Zusatzpaket zur IBIS-Shopverwaltung für die Classic Line 3.4 und höher. Dubletten entstehen dadurch, dass viele Kunden beim Bestellvorgang
Arbeiten mit UMLed und Delphi
Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf
Datenübernahme easyjob 3.0 zu easyjob 4.0
Datenübernahme easyjob 3.0 zu easyjob 4.0 Einführung...3 Systemanforderung easyjob 4.0...3 Vorgehensweise zur Umstellung zu easyjob 4.0...4 Installation easyjob 4.0 auf dem Server und Arbeitsstationen...4
Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten
Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.
Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter
Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................
Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.
Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,
Professionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
Programmierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
EINFACHES HAUSHALT- KASSABUCH
EINFACHES HAUSHALT- KASSABUCH Arbeiten mit Excel Wir erstellen ein einfaches Kassabuch zur Führung einer Haushalts- oder Portokasse Roland Liebing, im November 2012 Eine einfache Haushalt-Buchhaltung (Kassabuch)
IV. Datenbankmanagement
Wirtschaftsinformatik 2 (PWIN) IV. Datenbankmanagement Kapitel 2: Datenmanipulationssprache SQL Wirtschaftsinformatik 2 (PWIN) SS 2009, Professur für Mobile Business & Multilateral Security 1 Agenda 1.
mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank
mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man
SJ OFFICE - Update 3.0
SJ OFFICE - Update 3.0 Das Update auf die vorherige Version 2.0 kostet netto Euro 75,00 für die erste Lizenz. Das Update für weitere Lizenzen kostet jeweils netto Euro 18,75 (25%). inkl. Programmsupport
Kurzeinführung LABTALK
Kurzeinführung LABTALK Mit der Interpreter-Sprache LabTalk, die von ORIGIN zur Verfügung gestellt wird, können bequem Datenmanipulationen sowie Zugriffe direkt auf das Programm (Veränderungen der Oberfläche,
Fallbeispiel: Eintragen einer Behandlung
Fallbeispiel: Eintragen einer Behandlung Im ersten Beispiel gelernt, wie man einen Patienten aus der Datenbank aussucht oder falls er noch nicht in der Datenbank ist neu anlegt. Im dritten Beispiel haben
Unterabfragen (Subqueries)
Unterabfragen (Subqueries) Die kürzeste Formulierung ist folgende: SELECT Felderliste FROM Tabelle1 WHERE Tabelle1.Feldname Operator (SELECT Feldname FROM Tabelle2 WHERE Bedingung); wobei Tabelle1 und
php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...
php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.
Grundlagen der Informatik 2
Grundlagen der Informatik 2 Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm Hochschule Harz FB Automatisierung und Informatik [email protected] Raum 2.202 Tel. 03943 / 659 338 1 Gliederung 1. Einführung
5.2 Neue Projekte erstellen
5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort
Datenaustausch mit Datenbanken
Datenaustausch mit Datenbanken Datenbanken Einführung Mit dem optionalen Erweiterungspaket "Datenbank" können Sie einen Datenaustausch mit einer beliebigen Datenbank vornehmen. Der Datenaustausch wird
OP-LOG www.op-log.de
Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server
Referenzielle Integrität SQL
Referenzielle Integrität in SQL aus Referential Integrity Is Important For Databases von Michael Blaha (Modelsoft Consulting Corp) VII-45 Referenzielle Integrität Definition: Referenzielle Integrität bedeutet
Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten
Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,
Hilfe zur Dokumentenverwaltung
Hilfe zur Dokumentenverwaltung Die Dokumentenverwaltung von Coffee-CRM ist sehr mächtig und umfangreich, aber keine Angst die Bedienung ist kinderleicht. Im Gegensatz zur Foto Galeria können Dokumente
Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!
Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen! Grundstrukturen: Sub [name]([übergabe]) End Sub [Übergabe] ist
Oracle Datenbankprogrammierung mit PL/SQL Grundlagen
Oracle Datenbankprogrammierung mit PL/SQL Grundlagen Seminarunterlage Version: 12.05 Version 12.05 vom 29. Januar 2015 Dieses Dokument wird durch die veröffentlicht.. Alle Rechte vorbehalten. Alle Produkt-
Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann [email protected]
Hinweise zum Übungsblatt Formatierung von Text:
Hinweise zum Übungsblatt Formatierung von Text: Zu den Aufgaben 1 und 2: Als erstes markieren wir den Text den wir verändern wollen. Dazu benutzen wir die linke Maustaste. Wir positionieren den Mauszeiger
Zur drittletzten Zeile scrollen
1 Fragen und Antworten zur Computerbedienung Thema : Zur drittletzten Zeile scrollen Thema Stichwort Programm Letzte Anpassung Zur drittletzten Zeile scrollen Scrollen VBA Excel 1.02.2014 Kurzbeschreibung:
Leitfaden #1a. "zanox Publisher-Statistik" (next generation)
Leitfaden #1a "zanox Publisher-Statistik" (next generation) Thema: Sortieren von Leads und Sales nach dem Bearbeitungsdatum (inklusive Abschnitt "Filterung nach Transaktionsstatus") 1/8 Leitfaden "Sortieren
Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER
AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...
Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
Software Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten
Stundenerfassung Version 1.8 Anleitung Arbeiten mit Replikaten 2008 netcadservice GmbH netcadservice GmbH Augustinerstraße 3 D-83395 Freilassing Dieses Programm ist urheberrechtlich geschützt. Eine Weitergabe
AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom 21.10.2013b
AGROPLUS Buchhaltung Daten-Server und Sicherheitskopie Version vom 21.10.2013b 3a) Der Daten-Server Modus und der Tresor Der Daten-Server ist eine Betriebsart welche dem Nutzer eine grosse Flexibilität
Objektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
