Sie sind auf Seite 1von 8

Seminar ber:

INFORMIX Stored Procedure Language (SPL)

Projektgruppe Projektleiter Vortrag von

: Geodatenbank : Thomas Bode : Arash Shahi

Was ist SPL?


SPL (Stored Procedure Language) ist eine SQL-Erweiterung, mir der man benutzerdefinierte Routinen schreiben kann.

Um SPL-Routinen zu schreiben, braucht man ResourceRechte auf der Datenbank.

Die SPL-Routinen sind optimiert, so da die zeitintensiveren SQL- Anforderungen & Aufgaben schneller gelst werden knnen.

Was ermglichen die SPL-Routinen?


Eine SPLR kann eine in C oder in anderen Sprachen geschriebene Routine ausfhren.

SPLRs knnen SQL-Ausdrcke beinhalten.

Sie werden noch vor der Laufzeit des Programms geparst & optimiert. So ist es effizienter, eine SPL-Schleife einzusetzen, als einen SQL-Ausdruck zu wiederholen.

Was ermglichen die SPL-Routinen? (2.)


Man kann SPLRs auch dazu benutzen, um spezielle SQLAusdrcke vor einem Datenbankbenutzer zu verstecken.

SPLRs knnen auch dazu genutzt werden, den Benutzern begrenzte Zugriffsmglichkeiten auf die Datenbank zu erteilen.

Funktionen & Prozeduren


CREATE PROCEDURE new_price(percent REAL) . . END PROCEDURE;

CREATE FUNCTION discount_price(percent REAL) RETURNING MONEY . . END FUNCTION;

Funktionen & Prozeduren (Forts.)


CREATE PROCEDURE FROM 'read_add_source';

DROP PROCEDURE raise_prices; DROP FUNCTION read_address;

Ein SPLR - Beispiel


CREATE FUNCTION read_address (lastname CHAR(15)) -- one argument RETURNING CHAR(15),CHAR(15),CHAR(20), CHAR(15),CHAR(2),CHAR(5); -- 6 items DEFINE p_lname,p_fname, p_city CHAR(15); -- define each routine variable DEFINE p_add CHAR(20); DEFINE p_state CHAR(2); DEFINE p_zip CHAR(5);

Ein SPLR - Beispiel (Fortset.1)


SELECT fname, address1, city, state, zipcode INTO p_fname, p_add, p_city, p_state, p_zip FROM customer WHERE lname = lastname; RETURN p_fname, lastname, p_add, p_city, p_state, p_zip; --6 items END FUNCTION;

SPLR - Beispiel (Fortset.)


DOCUMENT 'This routine takes the last name of a',
'customer 'It

as ist only argument.',

returns the full name and address of',

'the customer. --brief description WITH LISTING IN 'C:\tmp\listfile' -- compile-time warnings go here ; -- end of the routine read_address

Wertzuweisung, Beispiele
LET a = 5; LET b = 6; LET c = 10; LET d = func1(x,y); LET a,b = 10,c+d; LET a,b = (SELECT cola,colb FROM tab1 WHERE cola=10);

IF, ELIF, ELSE


CREATE FUNCTION str_compare( str1 CHAR(20), str2 CHAR(20)) RETURNING INTEGER; DEFINE result INTEGER; IF str1 > str2 THEN result = 1; ELIF str2 > str1 THEN result = -1; ELSE result = 0; END IF RETURN result; END FUNCTION;

WHILE
CREATE PROCEDURE endless_loop() DEFINE i INTEGER; LET i = 1; WHILE ( 1 = 1 ) -- dont do this! LET i = i + 1; INSERT INTO table1 VALUES (i); END WHILE; END PROCEDURE;

FOR
FOR i = 1 TO 10 . . END FOR; FOR i = 1 TO 10 STEP 2 . . END FOR; FOR i IN (2,4,8,14,22,32) . . END FOR; FOR i IN (1 TO 20 STEP 5, 20 to 1 STEP -5, 1,2,3,4,5) . . END FOR;

Aufhren von Prozeduren & Funktionen


EXECUTE PROCEDURE update_orders(); EXECUTE FUNCTION scale_rectangles(107, 1.9) INTO new; EXECUTE PROCEDURE shahi@PGServer:shahi.update_orders(); LET a = area( rectv.length, rectv.width ); CALL area( rectv.length, rectv.width ) RETURNING a; -- these statements are equivalent

Quellen
Informix Guide to SQL: Tutorial Chapter 10, Creating & Using SPL Routines, p. 371 Informix Guide to SQL: Syntax Chapter 3, SPL Statements, p. 901