PDA

View Full Version : SQL Funktion



KM
31-07-09, 08:20
Hallo,

ich habe eine SQL-Funktion zu einem RPG-Programm erstellt. Diese Funktion hat folgende Parameter:

Input: 10A
Input: 3A
Output: 1A

Wenn ich die Funktion nun aufrufe und die Parameter als Variablen übergebe, funktioniert alles problemlos. Wenn ich den zweiten Parameter aber als Literal übergebe, z.B.

select ARTN, SDB( ARTN , 'DEU' ) from artstam

dann erhalte ich folgenden Fehler:

SDB der Art *N in *LIBL nicht gefunden.

Typ und Länge des Literals stimmt mit der Definition jedoch überein.

Kann man denn kein Literal als Parameter übergeben ?

Gruß,
KM

Pikachu
31-07-09, 08:33
Wie hast du die SQL-Funktion denn definiert (SQL-Anweisung)?

KM
31-07-09, 08:35
CREATE FUNCTION LIBOBJ/SDB(CHAR(10), CHAR(3))
RETURNS CHARACTER(1)
NOT DETERMINISTIC NO SQL
NO EXTERNAL ACTION
LANGUAGE RPGLE
PARAMETER STYLE GENERAL
EXTERNAL NAME 'LIBOBJ/SDBSPRUDF(SDB)'

B.Hauser
31-07-09, 09:44
SQL-Funktionen können überladen werden, d.h. die gleiche Funktion kann in der gleichen Bibliothek mehrfach, jedoch mit unterschiedlicher Parameterbeschreibung vorhanden sein.

Wenn Du einen alphanumerischen Wert als 'ABC' an eine Funktion übergibst, wird der Paramter als VARCHAR definiert und VARCHAR ist für SQL ein anderer Datentyp als CHAR, d.h. die entsprechende Funktion ist nicht vorhanden. Die Länge spielt dabei keine Rolle.

Du musst Deinen Ausdruck explizit mit CAST in Datentyp CHAR konvertieren.

Birgitta

KM
31-07-09, 09:52
Mit dem Cast funktioniert der Aufruf jetzt.

Vielen Dank Birgitta !