[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
------------------------------------------