XLVI. Oracle 8 関数

以下の関数により Oracle8 および Oracle7 データベースへのアクセスが 可能となります。この関数は、Oracle8 Call-Interface (OCI8) を使用し ます。この拡張機能を使用するには、Oracle8 クライアントライブラリが 必要です。

この拡張モジュールは、通常のOracle拡張機能より柔軟性があります。 この拡張モジュールは、グローバルおよびローカルの PHP 変数の Ocacle プレースホルダーへのバインドをサポートします。また、LOB,FILE,ROWID を完全にサポートしており、ユーザー定義の変数が使用可能です。

この拡張モジュールを使用する前に WebデーモンのユーザでもあるOracle ユーザのOracle用環境変数が正しく設定されていることを確認して下さい。 設定されている必要がある変数を以下に示します。

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

Webサーバーのユーザ用に環境変数を設定した後、Webサーバーのユーザ (nobody, www)をグループoracleに追加して下さい。

例 1. OCIに関するヒント


<?php
// by sergo@bacup.ru

// コマンドの実行を遅延させるには、オプション OCI_DEFAULT を使用して
// 下さい
OCIExecute($stmt, OCI_DEFAULT);

// (クエリ結果取得後に)使用するデータを取得

$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();

// INSERT または UPDATE 命令の場合に使用

$sql = "insert into table (field1, field2) values (field1 = 'value',
 field2 = empty_clob()) returning field2 into :field2";
OCIParse($conn, $sql);
$clob = OCINewDescriptor($conn, OCI_D_LOB);
OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save ("some text");

?>
     

コマンドラインで実行するのと同様な手法により、ストアドプロシージャ に簡単にアクセス可能です。

例 2. ストアドプロシージャの使用法


<?php
// by webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;" );

// この命令は、:address_id を入出力変数、:error_code を出力変数として
// ストアドプロシージャ sp_newaddress をコールします。
// 続いて、以下のようにバインドを実行します。

   OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
   OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
   OCIExecute ( $sth );

?>
     

目次
OCIDefineByName — SELECT 実行中、定義用の PHP 変数を使用する
OCIBindByName — Oracle プレースホルダーに PHP 変数をバインドする
OCILogon — Oracle への接続を確立する
OCIPLogon — 持続的接続を使用してOracle データベースに接続、ログオンする。 新しいセッションを返す。
OCINLogon — Oracle データベースに接続し、新規接続にログオン、 新規セッションを返す
OCILogOff — Oracleとの接続を切る
OCIExecute — 文を実行する
OCICommit — 未解決のトランザクションをコミットする
OCIRollback — 未解決のトランザクションをロールバックする
OCINewDescriptor — 空の新規ディスクリプタLOB/FILE(LOBがデフォルト)を初期化する
OCIRowCount — 作用された行の数を得る
OCINumCols — ある文における結果のカラム数を返す
OCIResult — 取得された行におけるカラムの値を得る
OCIFetch — 結果バッファーの次の行を取得する
OCIFetchInto — 結果配列の次の行を取得する
OCIFetchStatement — 結果データの全ての行を配列に取得する
OCIColumnIsNULL — 結果カラムが NULL であるかどうかを確認する
OCIColumnSize — 結果カラムサイズを返す
OCIServerVersion — サーバーのバージョン情報を有する文字列を返す
OCIStatementType — OCI 命令の型を返す
OCINewCursor — 新規カーソル(命令ハンドル)を返す - 参照カーソルをバインドするために使用する
OCIFreeStatement — ある文に関連する全リソースを開放する
OCIFreeCursor — カーソルに関連づけられた全リソースを開放する
OCIFreeDesc — ラージオブジェクト記述子を削除する
OCIColumnName — カラムの名前を返す
OCIColumnType — カラムのデータ型を返す
OCIParse — クエリーを処理し、文を返す
OCIError — stmt|conn|globalに関する直近のエラーを返す。 エラーが生じていない場合はfalseを返す。
OCIInternalDebug — 内部デバッグ用出力有効または無効にする。デフォルトでは無効