2017-03-14 9 views
0

Oracle DB内でプロシージャをコールする必要があります。 手順は次のようである:PHP OCI8関数の日付データ型を持つ名前でバインド

procedure test 
    (a IN VARCHAR2 
    ,b IN INTEGER 
    ,c OUT DATE) 

は、私は、cが空になると、すべてが正常に動作し

$sql="BEGIN test(:a, :b, :c); END;"; 

$smt = oci_parse($db, $sql); 
oci_bind_by_name($smt, ':a', $a); 
oci_bind_by_name($smt, ':b', $b); 
oci_bind_by_name($smt, ':c', $c); 
$results = oci_execute($smt); 

として手続きを呼んでいます。それは価値がある場合 しかし、私は私が変数にproducereを呼び出すには、日付などのデータタイプを設定するにはどうすればよい

oci_execute(): ORA-06502: PL 
/SQL: numeric or value error: character string buffer too small 
ORA-06512: at line 1' 

このエラーが出ますか?

答えて

0

oci_bind_by_name manual pageに文書化されたよう:

OUTバインドを使用すると、PHPが返された値を保持するのに十分なメモリを割り当てるようにするには、MAXLENGTHを指定する必要があります。

だから、単純に変更:

oci_bind_by_name($smt, ':c', $c); 

に:

oci_bind_by_name($smt, ':c', $c, 100); // NOTE: 100 is arbitrary. 

は、問題を解決する必要があります。

関連する問題