[PHP-users 11485] OCIBindByNameでストアドの戻り値が正しく取れない
j_kawakita
php-users@php.gr.jp
Thu, 14 Nov 2002 13:37:53 +0900
はじめまして、かわきたと申します。
php4.0.6+apahce1.3.26+mod_ssl-2.8.10-1.3.26、
oracle8.1.7の動作環境で、
oci関数を使って問い合わせをしています。
ocibindbynameを用いて、プロシージャの引数を取得し
取得した値によって結果判定を行なっているのですが、
帰ってきた結果が正しく判定できないことがあります。
帰ってきた結果を表示してみると「0」が表示されるのに
switch文に入るとcase 0: に引っかからずdefault まですっとんでいきます。
結果を入れている変数の型はstring型になっていました。
ストアドプロシージャ側ではnumber型なのになぜ変わっているのでしょうか?
また、(int)を用いて結果を入れている変数をキャストしたところ、
正しく判定されていない時には値が、"0" → 2 へ変わってしまいます。
同じような事象に遭遇されている方がいましたら、
対処方法を教えて下さい。
プログラムによるものか、
環境によるものなのか切り分けもできていない状況です。
どうぞよろしくお願いします。
補足)ソースです。
////////////////////////////////////////////////////////////
$strSql = "DECLARE BEGIN ";
$strSql .= "S_TEST_PRO(:I_01,:I_02,:I_03,:I_04,:IO_05); ";
$strSql .= "END;";
unset($o_num_Ret);
$o_num_Ret = 0;
if (pfParseSql($strSql, $intStmt) > 0) {
@OCIBindByName($intStmt,":I_01",&$i_str_arg1, -1);
@OCIBindByName($intStmt,":I_02",&$i_str_arg2, -1);
@OCIBindByName($intStmt,":I_03",&$i_str_arg3, -1);
@OCIBindByName($intStmt,":I_04",&$i_str_arg4, -1);
@OCIBindByName($intStmt,":IO_05",&$o_num_Ret,8);
if (@OCIExecute($intStmt, OCI_DEFAULT)){
switch ($o_num_Ret) {
case 2: // NG
return 1;
break;
case 1: // OK
break;
case 0: // OK
break;
case -1: // システムエラー
return -1;
break;
case -2: // DBロックエラー
return -2;
break;
default:
return -3;
break;
}
} else {
return -4;
}
@OCIFreeStatement($intStmt);
}
////////////////////////////////////////////////////////////
プロシージャはこんな感じです。
PROCEDURE S_TEST_PRO(
i_str_Arg1 IN VARCHAR2,
i_str_Arg2 IN VARCHAR2,
i_str_Arg3 IN VARCHAR2,
i_str_Arg4 IN VARCHAR2,
o_num_Ret OUT NUMBER
);
////////////////////////////////////////////////////////////