PL/SQL

Werbung
PL/SQL
- Kurze Einführung -
PL/SQL
• .. ist eine Oracle-eigene,
prozedurale Programmiersprache
• Sämtliche bekannten Konzepte
können verwendet werden:
Funktionen/ Prozeduren,
Abfragen/bedingte Ausführung,
Schleifen, etc.
23. April 2003
Übung Data Warehousing:
PL/SQL
2
Programmdateien
• Programme können in Dateien
abgelegt werden
• Ausführung eines Programmes in
SQL*Plus:
„@tolles_programm{.sql}“
• Programmdateien müssen mit
einer Leerzeile enden
23. April 2003
Übung Data Warehousing:
PL/SQL
3
PL/SQL-Programme
• .. bestehen aus Blöcken, welche
ineinander verschachtelt sein können:
DECLARE
.. /* Variablen-&Typdeklarationen */
BEGIN
.. /* Programmcode, Funktionen .. */
EXCEPTION
.. /* Exception-Handling */
END;
23. April 2003
Übung Data Warehousing:
PL/SQL
4
SQL in PL/SQL
• Erlaubte SQL-Statements:
– select, insert, delete, update +
Transaktionen
• Nicht (direkt) erlaubt
– create, drop, alter
• SELECT hat eine eigene, abgewandelte
Form:
select <attribut> into <variable>
from <tabelle> where <bedingung>;
23. April 2003
Übung Data Warehousing:
PL/SQL
5
Variablen und Datentypen
• Alle von Oracle unterstützen Typen
+ NUMBER, BOOLEAN
• Ermittlung zur Laufzeit möglich
DECLARE
name
VARCHAR(20);
gruppe
NUMBER;
punktezahl Gruppen.punkte%TYPE;
23. April 2003
Übung Data Warehousing:
PL/SQL
6
Zuweisungen & SQL
DECLARE
gruppe
Gruppen.name%TYPE;
punktezahl
Gruppen.punkte%TYPE;
BEGIN
SELECT name,punkte INTO gruppe,
punktezahl FROM Gruppen
WHERE punkte <= 10 FOR UPDATE;
punktezahl := punktezahl + 1;
INSERT INTO Gruppen VALUES (gruppe,
punktezahl);
END;
23. April 2003
Übung Data Warehousing:
PL/SQL
7
Kontrollflüsse
• LOOP EXIT WHEN <B> ... END LOOP;
• WHILE <B> LOOP ... END LOOP;
• FOR <V> IN <C>..<C2> LOOP
... END LOOP;
• IF <B> THEN ... ELSIF <B2> THEN ...
ELSE ... END IF;
23. April 2003
Übung Data Warehousing:
PL/SQL
8
Cursor ..
• Problem bei erwähnten
Zuweisungen von Tabellenwerten:
funktioniert nur bei single-rowselect, d.h. wenn ein einzelnes
Tupel zurückgeliefert wird
• Abhilfe: die sogenannten Cursor
• sie arbeiten sämtliche Tupel aus
dem Ergebnis nacheinander ab
23. April 2003
Übung Data Warehousing:
PL/SQL
9
.. Cursor ..
DECLARE
CURSOR GruppenCursor IS
SELECT name,punkte
FROM Gruppen WHERE punkte <= 10
FOR UPDATE;
BEGIN
OPEN Gruppencursor;
LOOP
23. April 2003
Übung Data Warehousing:
PL/SQL
10
.. Cursor
FETCH GruppenCursor INTO gruppe,punktezahl;
EXIT WHEN GruppenCursor%NOTFOUND;
punktezahl := punktezahl * 2;
DELETE FROM Gruppen WHERE CURRENT
OF GruppenCursor;
INSERT INTO Gruppen VALUES
(gruppe,punktezahl);
END LOOP;
CLOSE GruppenCursor;
END;
23. April 2003
Übung Data Warehousing:
PL/SQL
11
Prozeduren & Funktionen
CREATE PROCEDURE GruppeEinfuegen(
gruppe
Gruppen.name%TYPE,
punktezahl Gruppen.punkte%TYPE) AS
BEGIN
/* .. */
END GruppeEinfuegen;
BEGIN
/* Hauptprogramm */
/* .. */
GruppeEinfuegen('group1',0);
/* .. */
END;
23. April 2003
Übung Data Warehousing:
PL/SQL
12
Prozeduren & Funktionen
• Wie Prozeduren, Rückgabe über
return <wert>;
• select object_type, object_name
from user_objects
where object_type = 'PROCEDURE'
or object_type = 'FUNCTION';
• drop function <funktions_name>;
• CREATE OR REPLACE PROCEDURE .. ;
23. April 2003
Übung Data Warehousing:
PL/SQL
13
Fehlermeldungen
• Fehlermeldungen sind i.d.R. leider
wenig aussagekräftig
• genauere Beschreibung über
show errors procedure <name>;
• Anzeige des letzten Fehlers:
SHO ERR;
• Positionsangaben oft ungenau!
23. April 2003
Übung Data Warehousing:
PL/SQL
14
Herunterladen