Datenbanksysteme I

Werbung
Datenbanksysteme I
„
Dipl.-Inf. Michael Wilhelm
„
Hochschule Harz
„
FB Automatisierung und Informatik
„
[email protected]
„
Raum 2.202
„
Tel. 03943 / 659 338
FB Automatisierung und Informatik: Datenbanksysteme I
1
Inhalt
1. Grundlegende Begriffe der Datenbanktechnologie
2. Datenbankentwurf / Datenmodelle
3. ER-Modell / ER-Diagramm
4. SQL-Sprache
5. Normalisierung
6. SQL-Erweiterungen
7. Trigger / PL-SQL / Generator
FB Automatisierung und Informatik: Datenbanksysteme I
2
Automatisches Hochzählen
Häufig benötigt man einen ganzzahligen Schlüssel für ein Feld.
Nun kann man mit folgendem Code diesen bestimmen
(Psudocode und PL-SQL):
MaxNr =
SELECT max(MatrNr)
FROM Student
INSERT INTO Student (MatrNr, Name)
VALUES (MaxNr +1, "meier”);
Diese Variante funktioniert leider nicht sicher in einem
Netzwerk! Darum existieren Funktionen, die garantieren, dass
ein Schlüssel immer nur einmalig vergeben wird.
FB Automatisierung und Informatik: Datenbanksysteme I
3
Trigger und Generator
„
Trigger sind SQL-Befehle die bei einer Änderung
der Datenbank aufgerufen werden
„
Sechs Trigger
before
insert
after
insert
before
update
after
update
before
delete
before
delete
„
„
„
„
„
„
FB Automatisierung und Informatik: Datenbanksysteme I
4
Generator
„
Ein Generator benutzt einen internen Zähler
„
Bei der Benutzung wird dieser erhöht
„
Dann wird einem Wert im Datensatz dieser Wert,
unabhängig von "insert" bzw. "delete"
zugewiesen
FB Automatisierung und Informatik: Datenbanksysteme I
5
Generator für Oracle1.fdb
Beispiel:
■
Anlegen eines Mitarbeiters
■
SELECT MAX(empno)
FROM emp
■
■
■
7934
INSERT INTO EMP (empno, eName, deptno)
VALUES ( 7935, 'Bates',10);
FB Automatisierung und Informatik: Datenbanksysteme I
6
Generator für Oracle1.fdb
Beispiel:
■
Anlegen eines Studenten mittels eines Generators
■
CREATE GENERATOR GEN_NUMBER;
SET GENERATOR GEN_NUMBER TO 9999;
drop generator gen_number;
■
■
■
■
■
■
INSERT INTO EMP (empno, Ename, deptno)
VALUES ( GEN_ID(GEN_NUMBER,1), 'Bates', 10);
INSERT INTO EMP (empno, Ename, deptno)
VALUES ( GEN_ID(GEN_NUMBER,1), 'Norman', 10);
FB Automatisierung und Informatik: Datenbanksysteme I
7
Automatisches Einfügen für Oracle1.fdb
■
Anlegen eines Mitarbeiters mittels Generators
■
In Baumelement existiert nun der Generator
„GEN_MATRNR.
■
Nun die Verknüpfung mit dem Trigger:
■
Aufruf der Tabelle emp
Anklicken des Register Trigger:
■
FB Automatisierung und Informatik: Datenbanksysteme I
8
FB Automatisierung und Informatik: Datenbanksysteme I
9
Automatisches Einfügen für Oracle1.fdb
■
Rechte Maustaste, Eintrag „new“
■
Quellcode:
AS
BEGIN
new.empno = gen_id(gen_number, 1);
END
■
■
■
■
FB Automatisierung und Informatik: Datenbanksysteme I
10
FB Automatisierung und Informatik: Datenbanksysteme I
11
Datenbanksprache PL/SQL
Definition: Program-Language SQL
„
„
„
„
„
„
„
„
Einleitung
Blockübersicht
Variablendeklaration
IF / THEN / CASE
Schleifen
SQL-Anweisungen
Datenbankcursor
Exception
FB Automatisierung und Informatik: Datenbanksysteme I
12
PL/SQL Umgebung
PL/SQL Engine
PL/SQL
Block
PL/SQL
Block
PL/SQL
SQL
Procedural
Statement
Executor
SQL Statement Executor
Oracle Server
FB Automatisierung und Informatik: Datenbanksysteme I
13
Vorteile von PL/SQL
„
Integration
•
•
•
•
Stored Proc.
Trigger
Forms
Shared Libraries
Anwendung
Shared
Library
FB Automatisierung und Informatik: Datenbanksysteme I
Oracle Server
14
Vorteile von PL/SQL
„
Verbesserung der Performance
•
Eine Anweisung (Netz)
SQL
Anwendung
Anwendung
SQL
SQL
Andere
Andere DBMS
DBMS
SQL
Anwendung
Anwendung
SQL
IF...THEN
SQL
ELSE
SQL
END IF;
SQL
FB Automatisierung und Informatik: Datenbanksysteme I
Oracle
Oracle mit
mit
PL/SQL
PL/SQL
15
PL/SQL-Programmkonstrukte
Anonymer
Anonymer
Block
Block
Anwendungs
AnwendungsTrigger
Trigger
DECLARE
BEGIN
EXCEPTION
Datenbank
DatenbankTrigger
Trigger
Stored
Stored
Procedure
Procedure//
Function
Function
Anwendungs
AnwendungsProzedur/
Prozedur/
Funktion
Funktion
END;
Package
Package
Objekt
-Typ
Objekt-Typ
FB Automatisierung und Informatik: Datenbanksysteme I
16
Blockübersicht
„
Variablendeklaration
DECLARE
v_salary NUMBER(9,2) ;
„
// VARCHAR(122);
Block: Begin / End
BEGIN
v_salary := sal*12;
END
„
Block: EXCEPTION
EXCEPTION
WHEN exception1 [OR exception2 . . .] THEN
anweisung1;
anweisung2;
WHEN exception1 [OR exception2 . . .] THEN
anweisung2;
END;
FB Automatisierung und Informatik: Datenbanksysteme I
17
Eigenschaften von PL/SQL
„
(+) Portabel
„
(+) Verfügbarkeit von Variablen
„
(+) Programmierung mit prozeduralen Kontrollstrukturen
„
(+) Behandlung von Laufzeitfehlern
„
(-) Portierbarkeit zwischen Datenbanken
„
(-) Verbot von gespeicherten Prozeduren
FB Automatisierung und Informatik: Datenbanksysteme I
18
Zusammenfassung
„
„
„
„
PL/SQL ist eine Erweiterung zu SQL.
Blöcke mit PL/SQL-Code werden an eine PL/SQL-Engine
übergeben und von dieser verarbeitet.
Trigger
• Insert (before/after)
• Delete (before/after)
• Update (before/after)
Vorteile von PL/SQL
•
•
•
•
Integration
Verbesserte Performance
Portabilität
Modularität der Programmentwicklung
FB Automatisierung und Informatik: Datenbanksysteme I
19
Variablendeklaration: Firebird
Variablentypen:
„ Char(n)
„ VARCHAR2(n)
„ NUMBER(n), NUMBER(n.m)
„ DECIMAL(n), DECIMAL(n, m)
„ INTEGER, SMALLINT, LONG, FLOAT
„ BINARY_INTEGER
„ DATE
„
„
„
RAW, LONG RAW
CLOB, BLOB
BFILE
FB Automatisierung und Informatik: Datenbanksysteme I
20
Funktionen: 1. Aufgabe
FB Automatisierung und Informatik: Datenbanksysteme I
22
Funktionen: 2. Aufgabe
Erstellen Sie eine Funktion, die einen Parameter um eins erhöht.
Mit der IBOConsole !
1)
2)
3)
4)
5)
6)
7)
Datenbanktabelle öffnen, z. B. employee.fdb
Eintrag: "stored procedure"
rechte Maustaste, create
Name: INC
Eingangsparameter A Integer
Ausgangsparameter B Integer
Code:
begin
B = A+1;
suspend;
end
FB Automatisierung und Informatik: Datenbanksysteme I
23
Funktionen:
Aufruf der Funktion inc: mit der IBOConsole !
SELECT emp_no, (
select B
from inc(21)
)
from employee e;
SELECT emp_no, (
select B
from inc(e.emp_no)
)
from employee e;
FB Automatisierung und Informatik: Datenbanksysteme I
24
Funktionen: 3. Aufgabe
Erstellen Sie eine Funktion, die einen Parameter um zwei erhöht.
Mit IBOConsole und Dialogbasiert !
1)
2)
3)
4)
5)
Aufruf IBOConsole
Einloggen
Connect Employee.gdb
Anklicken Eintrag „Stored Procedures“
Rechte Maus, in der rechten Liste, Auswahl „Create“
FB Automatisierung und Informatik: Datenbanksysteme I
25
Definition mit der IBOConsole
FB Automatisierung und Informatik: Datenbanksysteme I
26
Definition mit der IBOConsole: Lösung
FB Automatisierung und Informatik: Datenbanksysteme I
27
Eintragen mittels SQL-Befehl
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
CREATE PROCEDURE INC2 ( A INTEGER )
RETURNS (
B INTEGER
)
AS
DECLARE VARIABLE x INTEGER;
BEGIN
x=A+2;
B=x;
suspend;
END ^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
FB Automatisierung und Informatik: Datenbanksysteme I
28
Trigger und Oracle1.fdb
„
„
„
„
„
„
„
„
Aufbau einer Methode, die Gehaltsänderungen
automatisch dokumentiert
Sechs Trigger
before
insert
after
insert
before
update
after
update
before
delete
before
delete
FB Automatisierung und Informatik: Datenbanksysteme I
29
Tabelle Sales_History
CREATE TABLE SAL_HISTORY
(
EMPNO
INTEGER NOT NULL,
CHANGE_DATE TIMESTAMP NOT NULL,
UPDATER_ID
VARCHAR(20) NOT NULL,
OLD_SAL
NUMERIC(7,2) DEFAULT 0 NOT NULL,
PERCENT_CHANGE
DOUBLE PRECISION NOT NULL,
NEW_SALARY
COMPUTED BY
(old_sal + old_sal * percent_change / 100),
PRIMARY KEY (EMPNO, CHANGE_DATE, UPDATER_ID)
);
FB Automatisierung und Informatik: Datenbanksysteme I
30
Trigger-Code
AS
BEGIN
IF (old.SAL <> new.SAL) THEN
INSERT INTO sal_history
(empno, change_date, updater_id, old_sal, percent_change)
VALUES (
old.empno,
'NOW',
user,
old.sal,
(new.sal - old.sal) * 100 / old.sal);
END
FB Automatisierung und Informatik: Datenbanksysteme I
31
FB Automatisierung und Informatik: Datenbanksysteme I
32
Trigger-Code
■
■
■
■
■
■
■
■
■
UPDATE EMP
SET SAL=1700
WHERE ( EMPNO = 7844);
EMPNO
CHANGE_DATE
UPDATER_ID
OLD_SAL
PERCENT_CHANGE
NEW_SALARY
FB Automatisierung und Informatik: Datenbanksysteme I
7844
02.07.2008 20:40:52
SYSDBA
1500
13
1700
33
Herunterladen