Anmelden

View Full Version : SQL und Servicprogramme



Seiten : [1] 2

Xanas
08-11-07, 09:18
kann man im SQL auch eine bestimmte Prozedur aus einem Servicepramm aufrufen?

Grund ich habe ein Servicprogramm, dass sich um Berechtigungen kümmert mit mehreren Externen Prozeduren. Ich möchte aber eine Bestimmte aufrufen.

Xanas

BenderD
08-11-07, 09:32
Hallo,

das Zauberwort heißt create function

mfg

Dieter Bender

Fuerchau
08-11-07, 10:11
Ergänzung:

Wobei mit "Create Function" keine SQL-Prozedur (native SQL-Body) sondern eine externe SQL-Prozedur erstellt werden muss.

Die externe SQL-Prozedur kann dann ein RPGLE-Programm sein, dass dann die gewünschten Service-Routinen aufruft.

BenderD
08-11-07, 10:49
Ergänzung der Ergänzung: und selbige nicht mit CALL aufgerufen, sondern in einem select verwendet werden kann.

d*b

Fuerchau
08-11-07, 11:09
OK, dann gibts noch die Alternative mit "Create Procedure", für die die selben Bedingungen gelten, wie oben, diese muss dann per CALL aufgerufen werden:

call myprocedure (Parm1, Parm2, ...)

select myfunction(Parm1, Parm2, ...) from myfile

B.Hauser
08-11-07, 12:36
Hallo,

jede exportierte Prozedur aus einem Service-Programm kann entweder als externe Stored Procedure oder als externe User Defined Function registriert werden.

Als Stored Procedure wird eine Prozedur registriert, die keinen Rückgabewert hat. Eine Funktion, also eine Prozedur mit Rückgabewert kann als externe UDF registriert werden.

Beim externen Namen, muss lediglich das Service-Programm und die Prozedur angegeben werden

Beispiel:


CREATE FUNCTION MYUDF (
Parm1 CHAR(7) ,
Parm2 DEC(15, 5) ...) )
RETURNS VARCHAR(256)
LANGUAGE RPGLE
DETERMINISTIC
NO SQL
RETURNS NULL ON NULL INPUT
NO EXTERNAL ACTION
NOT FENCED
EXTERNAL NAME 'MYSCHEMA/MYSRVPGM(MYPROC)'
PARAMETER STYLE GENERAL ;

Fuerchau
08-11-07, 13:43
Allerdings muss diese Serviceprozedur gewisse Aufrufkonventionen (Übergabeparameter wie NULL-Flag's, SQLSTATE, Functionname, Specificname und DiagnosticMessage) einhalten.

Angaben siehe "Parameter Style".

Ich gehe mal davon aus, dass diese Konventionen bei obigen Serviceprozeduren nicht eingehalten wurden und somit sich ein direkter SQL-Aufruf ausschliessen läßt.

Xanas
08-11-07, 13:55
Ähm vielen Dank schon mal, der Aufruf funktioniert schon mal super, nur ein Problem habe ich noch, der Rückgabe wert ist ein N (Boolean) als was muss ich den Return dann in der Create function angeben?

Fuerchau
08-11-07, 14:07
Boolean geht nicht, versuchs einfach mit CHAR(1) bzw. ZONED(1, 0) und konvertiere den Wert passend.

Xanas
08-11-07, 14:17
Typenkonvertierung in der SQL Funktion oder in der Serviceprogrammfunktion, dass wäre schlecht, denn die kann ich nicht ändern, die wir ja schon in Tausenden Programmen verwendet.