-
Schau dir deinen Aufruf an sowie genau die Felddeklaration die erwartet wird:
CALL PGM(ISBANILV/PROTIBLOG) PARM(&MSGTEXT +
'LOADPRJDAT' '10:12:12' 0 '00000')
Die 0 wird als Packed(15,5) übergeben !
Ich würde die Paramter im CLP genauso wie sie erwartet werden als Felder deklarieren und dann übergeben.
Dann bist du auf der sicheren Seite.
-
Wie sind die Parameter in der Stored Procedure definiert?
Ich vermute, dass Parameter 4 und 5 (SQLCODE und SQLSTATE) als INOUT-Parameter definiert wurden.
CL übergibt jedoch Konstanten, also Input only-Parameter.
In dem Moment, in dem in der Stored Procedure eine Änderung dieser Felder erfolgen soll, stürzt die Prozedur ab.
Beim Aufruf aus SQL werden keine Konstanten, sondern Variablen für die Parameter 4 und 5 verwendet.
Du musst also, wie Fuerchau bereits vorgeschlagen hat Variablen definieren und übergeben. Dabei ist zu beachten, dass SQLCODE als small integer definiert ist, was in CL entweder einer Definition von 2 Byte Integer (ab Release V5R3) oder 2A (vor Release V5R2) entspricht. SQLSTATE ist als 5A definiert
Birgitta
-
@Birgitta:
Seit wann übergibt CLP Konstanten ?
Ein CLP-CALL ist immer ein CALL-BY-REFERENCE.
Werden Konstanten übergeben, werden diese intern in Default-Größen (schon mehrfach besprochen, CHAR(32), PKD(15,5)) überführt und die Adresse ans Programm übergeben.
Das Programm kann diese dann auch ändern ohne Absturz, nur das CLP kriegt dann nichts mit.
Der MCH deutet auf falsche Ausprägung des Parameters hin (Typ/Länge).
-
@Fuerchau,
hab' ich gepennt! Man sollte die Posts genau durchlesen bevor man seinen Senf dazugibt.
Wie Du schon sagst, übergibt CL nur Pointer. Die Länge ist dabei fast uninteressant! Das Programm übernimmt die Adressen und die Anzahl an Byte, die in dem aufgerufenen Programm erwartet werden.
Allerdings bedeutet MCH3601 nicht falsche Ausprägung von Parametern sondern:
Zeiger für angegebene Position nicht gesetzt.
Der Grund für den Abbruch liegt einfach darin, dass Stored Procedures aus einem SQL-Interface (z.B. embedded oder interaktives SQL, ODBC, JDBC usw.) aufgerufen werden müssen! Und CL unterstützt kein embedded SQL!
Beim Aufruf über den SQL-CALL werden eine Reihe zusätzlicher Parameter übergeben und während der Ausführung der Stored Procedure gesetzt! Diese fehlen beim Aufruf über den CL-Befehl. Deshalb auch der Abbruch mit MCH3601.
Ob man allerdings eine Stored Procedure aus CL aufrufen kann, wenn man alle erwarteten Parameter übergibt, hab' ich nicht ausprobiert.
Um das Problem zu lösen gibt es zwei Möglichkeiten:
- Man schreibt ein Wrapper-Programm/Prozedur in einer Programmiersprache bei der embedded SQL unterstützt wird (z.B. RPG). In dieser Prozedur wird nur der SQL-CALL abgesetzt.
- Man führt den CALL-Befehl in CL über die QSH aus.
Beispiel:
PHP-Code:
QSH CMD('db2 "Call MySchema.MyStrProc('ParAlpha', 123)"')
Birgitta
-
Wenn man weiß, welche Parameter erwartet werden, dann klappt auch der Aufruf aus CLP.
Allerdings weiß ich nicht, ob SQL-Prozeduren einen Connect durchführen, falls noch keine Verbindung besteht.
Allerdings codiere ich ja auch keinen Connect im SQLRPG, da verbindet sich die DB von selber.
Ich denke aber, dass das genauso klappt wie bei externen SQL-Prozeduren, die ja auch keinen Connect enthalten.
Similar Threads
-
By psd-400 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 21-08-06, 12:58
-
By Joe in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 27-04-06, 15:17
-
By COS in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 23-02-06, 16:01
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