-
Externe Stored Procedure
Beim Versuch, ein CLP über eine Externe Stored Procedure aufzurufen, bekomme ich den Fehler:
PHP-Code:
SQL-Status: 42884
Vendorencode: -440
Nachricht: [SQL0440] Routine MYCLP in MYLIB mit angegebenen Parametern nicht gefunden. Ursache . . . . : Eine Funktion oder Prozedur mit dem angegebenen Namen und verträglichen Argumenten wurde nicht gefunden. Fehlerbeseitigung: In der Anweisung CALL oder im Funktionsaufruf die korrekte Anzahl und Art der Parameter angeben. Die Anforderung wiederholen.
Die Parameter des CLPs:
PHP-Code:
DCL VAR(&PARM1) TYPE(*DEC) LEN(6 0)
DCL VAR(&PARM2) TYPE(*DEC) LEN(7 0)
Die Stored Procedure lautet:
PHP-Code:
CREATE PROCEDURE MYLIB.TEST (
IN PARM1 DECIMAL(6, 0) ,
IN PARM2 DECIMAL(7, 0) )
LANGUAGE CL
SPECIFIC MYLIB.TEST
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'MYLIB/MYCLP'
PARAMETER STYLE SQL ;
Aufruf aus SQL:
PHP-Code:
call mylib.test(123456, 1234567)
Wo ist der Fehler? Wie muss ich die Parameter definieren, dass es funktioniert?
-
auf der ISeries R530 ?
Hallo,
läuft auf der ISeries das Release R530 ?
-
Nein, V5R4M0. (Das Forum will min. 20 Zeichen, jetzt müsste es passen)
-
ich tippe mal auf Seiteneffekt des überladens (SQL erlaubt mehrere gleichnamige Procedures mit unterschiedlichen Parameterschnittstellen) versuchs mal mit einem Cast der Parameter beim Aufruf
D*B
Zitat von Allrounder
Beim Versuch, ein CLP über eine Externe Stored Procedure aufzurufen, bekomme ich den Fehler:
PHP-Code:
SQL-Status: 42884
Vendorencode: -440
Nachricht: [SQL0440] Routine MYCLP in MYLIB mit angegebenen Parametern nicht gefunden. Ursache . . . . : Eine Funktion oder Prozedur mit dem angegebenen Namen und verträglichen Argumenten wurde nicht gefunden. Fehlerbeseitigung: In der Anweisung CALL oder im Funktionsaufruf die korrekte Anzahl und Art der Parameter angeben. Die Anforderung wiederholen.
Die Parameter des CLPs:
PHP-Code:
DCL VAR(&PARM1) TYPE(*DEC) LEN(6 0)
DCL VAR(&PARM2) TYPE(*DEC) LEN(7 0)
Die Stored Procedure lautet:
PHP-Code:
CREATE PROCEDURE MYLIB.TEST (
IN PARM1 DECIMAL(6, 0) ,
IN PARM2 DECIMAL(7, 0) )
LANGUAGE CL
SPECIFIC MYLIB.TEST
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'MYLIB/MYCLP'
PARAMETER STYLE SQL ;
Aufruf aus SQL:
PHP-Code:
call mylib.test(123456, 1234567)
Wo ist der Fehler? Wie muss ich die Parameter definieren, dass es funktioniert?
-
Hallo,
gib die Parameter beim Aufruf mal mit ,0 an.
Werden numerische Werte ohne Dezimal-Stellen in SQL verwendet, werden diese als Integer und nicht als Dezimal interpretiert.
Da in SQL Funktionen und Prozeduren überladen werden können, wird eine Prozedur mit Integer-Parametern gesucht. (Obwohl das nicht das eigentliche Problem sein kann, da Stored Procedures nur aufgrund der Anzahl der Parameter überladen werden können.)
Außderdem würde ich Parameter-Style General (anstatt SQL) verwenden. Bei General werden nur die Parameter, so wie sie definiert sind übergeben. Bei Parameter Style General werden beim Aufruf der Stored Procedure noch zusätzliche Parameter z.B. Indikator-Variablen für NULL-Werte oder der SQL-Status übergeben.
Birgitta
-
Ggf. ist auch explizites casten erforderlich:
call mylib.test(dec(123456, 6, 0), dec(1234567, 7, 0) )
-
Hallo,
ich habe gerade eben eine einfaches CL-Programm erstellt, das 2 numerische Werte erwartet und dieses wie folgt als Stored Procedure registriert:
PHP-Code:
CREATE PROCEDURE MYSCHEMA.HSCLPROC (
IN PARM1 DECIMAL(7, 0),
IN PARM2 DECIMAL(6, 0))
LANGUAGE CL
SPECIFIC MYSCHEMA.HSCLPROC
DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
EXTERNAL NAME 'MYSCHEMA/HSCLPROC'
PARAMETER STYLE GENERAL;
und wie folgt ohne Probleme aufgerufen:
PHP-Code:
CALL MYSCHEMA.HSCLPROC (1,0 , 7,0);
CALL MYSCHEMA.HSCLPROC(1 , 7);
Zwischen dem 1. Parameter und dem Komma, musste ich allerdings ein Blank einfügen. Ohne Blank habe ich ebenfalls eine Fehlermeldung (jedoch nicht die o.g. erhalten!)
Prüfe sicherheitshalber nochmals die Berechtigungen und den SQL-Path.
SQL-Naming vergibt die Berechtigungen nicht unbedingt so, wie wir es auf der AS/400 (oder wie das Ding jetzt heißt) gewohnt sind.
@Baldur:
Explizites Casting im SQL-Call-Befehl ist nur für die folgenden Datentypen zulässig:
BLOB, CLOB, DBCLOB, DATE, TIME, TIMESTAMP
Birgitta
-
Vielen Dank schonmal für die Hilfe.
Berechtigungen sind in Ordnung, die hatte ich nach Erstellen der Stored Procedure nachträglich vergeben.
Casten hat wie schon von Birgitta erwähnt nicht funktioniert:
[SQL0104] Token DEC ungültig. Gültige Token: : BLOB CLOB DATE DBCLOB DLVALUE TIME
Der Aufruf über
call mylib.test(123456,0 , 1234567,0)
hat leider auch nicht funktioniert, immer noch der gleiche Fehler.
Ich werde weiter testen und euch auf dem laufenden halten.
Gruß Allrounder
-
Zitat von Allrounder
Die Parameter des CLPs:
PHP-Code:
DCL VAR(&PARM1) TYPE(*DEC) LEN(6 0)
DCL VAR(&PARM2) TYPE(*DEC) LEN(7 0)
Nur zur Sicherheit:
Wie sind denn die Parameter beim Befehl PGM im CLP angegeben?
-
was sagt denn der select * from qsys2.sysprocs???
D*B
Zitat von Allrounder
Vielen Dank schonmal für die Hilfe.
Berechtigungen sind in Ordnung, die hatte ich nach Erstellen der Stored Procedure nachträglich vergeben.
Casten hat wie schon von Birgitta erwähnt nicht funktioniert:
[SQL0104] Token DEC ungültig. Gültige Token: : BLOB CLOB DATE DBCLOB DLVALUE TIME
Der Aufruf über
call mylib.test(123456,0 , 1234567,0)
hat leider auch nicht funktioniert, immer noch der gleiche Fehler.
Ich werde weiter testen und euch auf dem laufenden halten.
Gruß Allrounder
-
Zitat von Pikachu
Nur zur Sicherheit:
Wie sind denn die Parameter beim Befehl PGM im CLP angegeben?
PHP-Code:
PGM PARM(&PARM1 &PARM2)
DCL VAR(&PARM1) TYPE(*DEC) LEN(6 0)
DCL VAR(&PARM2) TYPE(*DEC) LEN(7 0)
Zitat von BenderD
was sagt denn der select * from qsys2.sysprocs???
D*B
Die Stored Procedure ist auch hier korrekt gespeichert.
-
Das Problem ist gelöst. Vielen Dank für die vielen Antworten.
Der SQL-Fehler, der auf ein Problem des Überladens bzw. die Parameterübergabe hindeudete, war irreführend. Ein Aufruf der SP im interaktiven SQL auf der iSeries hat funktioniert.
Dort war die LIBL korrekt eingestellt. Alles lief problemlos.
In der SP ist der Objektname des CL's zwar qualifiziert angegeben, es fehlten beim Aufruf über den Navigator jedoch weitere Bibliotheken, die das CL benötigt.
Ich werde zukünftig die SQL-Fehlermeldungen im Navigator mit etwas mehr Vorsicht genießen.
Similar Threads
-
By rebe in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 12-10-06, 11:22
-
By florian in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 17-05-06, 16:08
-
By peter.kinne in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 15-04-05, 09:04
-
By HeisigA in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 21-02-05, 18:58
-
By Frank Pusch in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 13-06-01, 17:57
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks