[ PHP ] Oracle ストアドプロシージャを呼び出し結果を取得する

Pocket

ここでは、PHP から Oracle のストアドプロシージャを呼び出し、その結果を取得するサンプルを掲載しています。ちなみに、ストアドプロシージャは英語では stored procedure と書きます。

スポンサーリンク

ストアドプロシージャの呼び出しと結果の取得

oci8 関数を使ってストアドプロシージャを実行し、OUT パラメータを取得するサンプルコードです。dbms_utility.db_version プロシージャを呼び出してデータベースのバージョンを 取得しています。

// データベースへ接続する
$conn = oci_connect('user', 'password', 'dbname');

// データベースのバージョンを取得する 
// dbms_utility.db_version プロシージャを実行する
$sql = <<< SQL_END
  declare
  begin
    dbms_utility.db_version(:version, :compatibility);
  end;
SQL_END;

$stmt = oci_parse($conn, $sql);

// パラメータを割り当て
oci_bind_by_name($stmt, ":version",       $version, 128);
oci_bind_by_name($stmt, ":compatibility", $compatibility, 128);

// sql の実行
oci_execute($stmt, OCI_NO_AUTO_COMMIT);

// ステートメントの解放
oci_free_statement($stmt);

// データベースから切断
oci_close($conn);

// 出力
var_dump($version);
var_dump($compatibility);

// 出力結果例
// ----------------------------------------------
// string '11.1.0.7.0' (length=10)
// string '11.1.0.0.0' (length=10)

ポイント

  • php.ini 内の allow_call_time_pass_reference は On にする

allow_call_time_pass_reference=Off の場合、次のようにエラーが発生してしまいます。

Deprecated: Call-time pass-by-reference has been deprecated in ・・・

  • oci_bind_by_name の第4パラメータでバッファの大きさを指定する

バッファの大きさを OUT パラメータのサイズより大きく取得しておかないと、次のように Oracle エラーが発生してしまいます。

ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました
ORA-06512: “SYS.DBMS_UTILITY”, 行514 ORA-06512: 行3 in ・・・

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *