@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:
  1. 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.
  2. Man führt den CALL-Befehl in CL über die QSH aus.
Beispiel:
PHP-Code:
QSH        CMD('db2 "Call MySchema.MyStrProc('ParAlpha', 123)"'
Birgitta