Databases Reference
In-Depth Information
SELECT liefermenge INTO geliefert
FROM position
WHERE artikel_nr=arti_nr
AND bestell_nr=best_nr;
IF sqlstate=nicht_vorhanden THEN
SET fehler=1
ELSEIF geliefert IS NOT NULL THEN
SET fehler=2
ELSE
SET fehler=0;
UPDATE position
SET liefermenge=anzahl,
gesamtpreis=gesamtpreis*anzahl/bestellmenge
WHERE artikel_Nr=arti_nr
AND bestell_nr=best_nr;
UPDATE artikel
SET bestand=bestand-anzahl
WHERE artikel_nr=arti_nr
END IF
END;
Durch BEGIN ATOMIC ... END wird eine Aktion beschrieben, die alle Eigenschaften
einer Transaktion 9 hat, d.h., sie wird entweder vollständig ausgeführt oder gar
nicht. Sie ist nur in dem Sinne keine Transaktion, als dass der Programmaufruf in
eine Transaktion eingebettet sein kann - ein Ende der Prozedur stellt nicht automa-
tisch ein Ende der Transaktion dar. Wenn wir dagegen den Block der Prozedur in
BEGIN ... END einbetten (ohne ATOMIC ), gilt diese spezielle Eigenschaft nicht.
Eine Datenbankprozedur kann über die übliche SQL-Schnittstelle mit der CALL-
Anweisung aufgerufen werden. Diese SQL-Schnittstelle kann überall verwendet
werden, wo SQL-Anweisungen formuliert werden können, also z.B.
in einer interaktiven SQL-Umgebung (ISQL)
über Embedded SQL (ESQL) in einer Wirtssprache
über ein Call-Level-Interface (CLI) aus einer Programmiersprache
über ODBC
Ein Aufruf kann wie folgt aussehen:
CREATE VARIABLE fehler INTEGER;
CALL lieferung (960153, 'G001', 1, fehler);
SELECT fehler FROM dummy;
9
Das Transaktionskonzept von SQL haben wir in Abschnitt 7.1 eingeführt.
 
Search WWH ::




Custom Search