[PHP-users 11660] PHPからOracleのストアドプロシージャを呼びたい

原 啓次 php-users@php.gr.jp
Thu, 21 Nov 2002 17:21:33 +0900


お世話になっております。
原@クエストです。

環境:
Redhat7.2
PHP 4.2.4-dev
Oracle Client 8.1.7

上記の環境で開発をしております。
やろうとしていることはPHPからORACLEの
ストアドプロシージャを呼びだすことです。

通常のSQL文などは正しく動作しているので、
プロシージャの呼び方が間違えているのでしょうか!?

具体的なエラーは以下のメッセージです。

Warning: OCIStmtExecute: ORA-00933: SQL command not properly ended 

ORA-00933を調べたところ、
「SQL コマンドが正しく終了されていません。」
とありました。

しかし、直接SQL*PLUSで実行したところ正しく実行できました。

ソースは以下のようになっております。
●PHP(一部)
		$lstrSql .= "DECLARE 
		w_IDSEIKN      PLAN_USER.IDSEIKN%TYPE;  
		w_IDMEIKN      PLAN_USER.IDMEIKN%TYPE;  
		w_KISKBN       PLAN_USER.KISKBN%TYPE;   
		w_IDKISCD      PLAN_USER.IDKISCD%TYPE;  
		w_IDYAKUCD     PLAN_USER.IDYAKUCD%TYPE; 
		w_IDSZKCD      PLAN_USER.IDSZKCD%TYPE;  
		w_IDMAIL       PLAN_USER.IDMAIL%TYPE;   
		w_SECJYOHO     PLAN_USER.SECJYOHO%TYPE; 
		";
		$lstrSql .= "BEGIN ";
		$lstrSql .= "ESTGETUIDINFO(:in_userid, :in_passwd, :w_SysCD, w_IDSEIKN, w_IDMEIKN, 
		w_KISKBN, w_IDKISCD, w_IDYAKUCD, w_IDSZKCD, w_IDMAIL, w_SECJYOHO,:w_RET);";
		$lstrSql .= "END;";

		// SQL文のparse
		$stmt = OCIParse($lobjConn, $lstrSql);
		OCIBindByName ( $stmt, ":in_userid", mFunstrCnvEncStr2Sql($_POST["ctl_UserId"]), -1 );
		OCIBindByName ( $stmt, ":in_passwd", mFunstrCnvEncStr2Sql($_POST["ctl_Password"]), -1 );
		OCIBindByName ( $stmt, ":w_SysCD", $w_SysCD, -1 );
		OCIBindByName ( $stmt, ":w_RET", &$w_RET, -1 );
		OCIExecute ( $stmt );

●プロシージャ(一部)
PROCEDURE ESTGETUIDINFO                                                                                                         (                                                                                                                                   inUserID    in  VARCHAR2,                                                                                                       inPassword  in  VARCHAR2,                                                                                                       inSysCD     in  VARCHAR2,                                                                                                       outIDSEIKN  out VARCHAR2,                                                                                                       outIDMEIKN  out VARCHAR2,                                                                                                       outKISKBN   out VARCHAR2,                                                                !
                                       outIDKISCD  out VARCHAR2,                                                                                                       outIDYAKUCD out VARCHAR2,                                                                                                       outIDSZKCD  out VARCHAR2,                                                                                                       outIDMAIL   out VARCHAR2,                                                                                                       outSECJYOHO out VARCHAR2,                                                                                                       outRET      out VARCHAR2                                                                                                    
)

色々試してみたのですが、解決できそうに無いので
皆様の知恵をお借りしたいと思いました。

よろしくお願いします。

以上です。                                                                                                                           
------------------------------------------
(株)クエスト
システムソリューション事業部
 ソフトウエア・テクノロジーセンター
原 啓次
Mail:hara@quest.co.jp
------------------------------------------