2012-05-02 23 views
1

ライブラリLMTLIB内に作成されたAS400 RPGLEプログラムは、ARTESTと呼ばれています。PHP/Zend Framework内のSQLからのRPGLEプログラムの呼び出し

それはちょうど今2

$myVar = "1"; 

$db = Zend_Registry::get('config')->resources->multidb->as400; 

$abstractAdapter = new Zend_Db_Adapter_Db2($db); 

//Gives the message "Invalid bind-variable position 'myVar'" 
$sql = 'CALL QSYS.QCMDEXC(\'CALL LMTLIB.ARTEST PARM(?)\', 0000000026.00000)'; 

//Gives the message "Token PARM was not valid. Valid tokens: (INTO USING. SQLCODE=-104"  
$sql = 'CALL LMTLIB.ARTEST PARM(?)'; 

//Gives the message "ARTEST in LMTLIB type *N not found. SQLCODE=-204" 
$sql = 'CALL LMTLIB.ARTEST (?)'; 

$stmt = new Zend_Db_Statement_Db2($abstractAdapter, $sql); 

$stmt->bindParam('myVar', $myVar, 4, 1); 

$stmt->execute(); 

を返す第三SQL文が「見つからない」というメッセージで失敗する理由、私は一種-の理解することができ、単一の数値INOUTパラメータを、持っている...それ理由テーブル/ファイルではなく、むしろRPGLEプログラムです。

(?)を削除して(1)を入れると、SQL呼び出しが成功したように見え、RPGLEプログラムが呼び出されたことがわかります。しかし、私はそのプログラムからの反応が何であるかを見ることができません。

ありがとうございました!

答えて

2

一般に、データベース・マネージャーはCALLステートメントを使用してストアード・プロシージャーを呼び出します。これを実行すると、パラメータ署名がCALLの署名と一致するストアドプロシージャが検索されます。

その名前とシグニチャーを持つストアード・プロシージャーがない場合、データベース・マネージャーはプログラムを呼び出そうとします。この場合も、パラメータマッチングプロセスが発生します。あなたが適切にマッチしたパラメータを得ることができるので、

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstcallsta.htm

は、私は、ストアドプロシージャを作成することをお勧めします。

+0

Zendと同じように見えます。ちょうど1つの助言:私がdb2/400でphpとodbcを使って作業したとき、php_odbcが出力パラメータをサポートしていないことがわかりました。 – kratenko

0

IBM RPGLEは、Webサービス呼び出しによってZendフレームワークとインターフェースできます。

スコット・クレメントは、アプリケーションに応じて、このhere.

の基礎の一部の上に行く、これはRPGコードとインタフェースをするための最良の方法かもしれません。 Webサービスは、多くのRPGプログラムおよびAS/400表を呼び出して、得られた結果セットを戻すことができます。 Zendは他のRESTful呼び出しと同じように見えますが、これはモデルによって処理される可能性があります。

関連する問題