4

IBM i (V5R4) で外部ストアード・プロシージャーを作成しようとしていますが、実行しようとするとエラーが発生します。

私がやりたいことは、パラメーターを渡すことも、データを返すことを心配することもなく、RPG プログラムを呼び出すことだけです。申し訳ありませんが、私は RPG プログラマーでも IBM i の専門家でもありません。そのため、非常に単純なことを見落としている可能性があります。

プロシージャを作成するための SQL:

CREATE PROCEDURE SOMELIB.SOMEPROC ( ) 

    LANGUAGE RPGLE 

    NOT DETERMINISTIC 

    NO SQL
    EXTERNAL NAME 'OTHERLIB/SOMERG' 

    PARAMETER STYLE GENERAL; 

CALL SOMELIB.SOMEPROC() を実行すると発生するエラーは次のとおりです。

SQL 状態: 38501
ベンダー コード: -443
メッセージ: [CEE9901] アプリケーション エラーです。RNX1216 は、ステートメント 2100000001、命令 X'0000' で BB1002RG によって監視されていません。原因 。. . . . : 例外が発生して処理されなかったため、アプリケーションは異常終了しました。未処理の例外が送信されるプログラムの名前は SOMERG SOMERG です。メッセージが送信された時点で、プログラムは高水準言語ステートメント番号で停止されました。複数のステートメント番号が示されている場合、そのプログラムは最適化された ILE プログラムです。最適化では、単一のステートメント番号を決定することはできません。*N が値として表示されている場合は、実際の値が利用できなかったことを意味します。回復 。. . 処置: 前にリストされた低レベルのメッセージを参照して、例外の原因を特定してください。エラーを修正してから、要求を再試行してください。

4

4 に答える 4

5

プロシージャーは、ライブラリー・リストを設定せずに RPG プログラムを呼び出しています。次の 2 つのいずれかを行うことができます。

1) RPG プログラムの F 仕様を変更して、EXTFILE キーワードを使用してライブラリーを修飾します。

2) 適切なライブラリーをライブラリー・リストに追加するストアード・プロシージャーから CL プログラムを呼び出して、そのライブラリーが前の呼び出しから既に存在している可能性があるという事実を確実に考慮してください。次に、CL プログラムに RPG プログラムを呼び出させます。

于 2009-10-15T17:38:31.837 に答える
2

(もう少し失礼な解決策) ストアド プロシージャを開始するユーザーを特定します。そのユーザーのジョブ記述を変更して、正しいライブラリー・リストを作成してください。

しかし、私の経験では、CL プログラムは最も実用的なソリューションでもあります。

于 2009-11-11T14:26:50.967 に答える