[PHP-users 11663] PHPからOracleのストアドプロシージャを呼びたい
原 啓次
php-users@php.gr.jp
Thu, 21 Nov 2002 17:51:57 +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
------------------------------------------