LXXVII. Oracle 8 関数

導入

以下の関数により Oracle8 および Oracle7 データベースへのアクセスが 可能となります。この関数は、Oracle8 Call-Interface (OCI8) を使用し ます。

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

要件

この拡張モジュールを使用するには、Oracle8クライアントライブラリを 必要とします。

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

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

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

Webサーバが起動しないか、起動時にクラッシュする場合: Apacheがpthreadライブラリにリンクされているかどうか次のように確認 して下さい。

# ldd /www/apache/bin/httpd 
    libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
    libm.so.6 => /lib/libm.so.6 (0x4002f000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
    libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
    libc.so.6 => /lib/libc.so.6 (0x4007e000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

libpthread がこの一覧にない場合、Apacheを再インストールする必要 があります。

# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread ./config.status
# make
# make install

UnixWareのようないくつかのシステムでは、libpthreadの代わりに libthreadが使用されています。PHPとApacheは、 EXTRA_LIBS=-lthreadをconfigureに指定する必要があります。

インストール手順

オプション--with-oci8[=DIR]を指定 してPHPをコンパイルする必要があります。ただし、DIRのデフォルトは、 環境変数ORACLE_HOMEの値です。

実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

OCI_DEFAULT (integer)

Statement execution mode. Statement is not committed automatically when using this mode.

OCI_DESCRIBE_ONLY (integer)

Statement execution mode. Use this mode if you don't want to really execute query, but only get select-list description.

OCI_COMMIT_ON_SUCCESS (integer)

Statement execution mode. Statement is automatically commited after oci_execute() call.

OCI_EXACT_FETCH (integer)

Statement fetch mode. Used when the application knows in advance exactly how many rows it will be fetching. This mode turns prefetching off for Oracle release 8 or later mode. Cursor is cancelled after the desired rows are fetched and may result in reduced server-side resource usage.

OCI_SYSDATE (integer)

OCI_B_BFILE (integer)

Used with oci_bind_by_name() when binding BFILEs.

OCI_B_CFILEE (integer)

Used with oci_bind_by_name() when binding CFILEs.

OCI_B_CLOB (integer)

Used with oci_bind_by_name() when binding CLOBs.

OCI_B_BLOB (integer)

Used with oci_bind_by_name() when binding BLOBs.

OCI_B_ROWID (integer)

Used with oci_bind_by_name() when binding ROWIDs.

OCI_B_CURSOR (integer)

Used with oci_bind_by_name() when binding cursors, previously allocated with oci_new_descriptor().

OCI_B_NTY (integer)

Used with oci_bind_by_name() when binding named data types.

OCI_B_BIN (integer)

SQLT_BFILEE (integer)

The same as OCI_B_BFILE.

SQLT_CFILEE (integer)

The same as OCI_B_CFILEE.

SQLT_CLOB (integer)

The same as OCI_B_CLOB.

SQLT_BLOB (integer)

The same as OCI_B_BLOB.

SQLT_RDD (integer)

The same as OCI_B_ROWID.

SQLT_NTY (integer)

The same as OCI_B_NTY.

OCI_FETCHSTATEMENT_BY_COLUMN (integer)

Default mode of oci_fetch_all().

OCI_FETCHSTATEMENT_BY_ROW (integer)

Alternative mode of oci_fetch_all().

OCI_ASSOC (integer)

Used with oci_fetch_all() and oci_fetch_array() to get an associative array as a result.

OCI_NUM (integer)

Used with oci_fetch_all() and oci_fetch_array() to get an enumerated array as a result.

OCI_BOTH (integer)

Used with oci_fetch_all() and oci_fetch_array() to get an array with both associative and number indices.

OCI_RETURN_NULLS (integer)

Used with oci_fetch_array() to get empty array elements if field's value is NULL.

OCI_RETURN_LOBS (integer)

Used with oci_fetch_array() to get value of LOB instead of the descriptor.

OCI_DTYPE_FILE (integer)

This flag tells oci_new_descriptor() to initialize new FILE descriptor.

OCI_DTYPE_LOB (integer)

This flag tells oci_new_descriptor() to initialize new LOB descriptor.

OCI_DTYPE_ROWID (integer)

This flag tells oci_new_descriptor() to initialize new ROWID descriptor.

OCI_D_FILE (integer)

The same as OCI_DTYPE_FILE.

OCI_D_LOB (integer)

The same as OCI_DTYPE_LOB.

OCI_D_ROWID (integer)

The same as OCI_DTYPE_ROWID.

例 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");
OCICommit($conn);

?>

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

例 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 );

?>

目次
oci_bind_by_name --  Binds the PHP variable to the Oracle placeholder
oci_cancel -- Cancels reading from cursor
oci_close -- Closes Oracle connection
collection->append -- Appends an object to the collection
collection->assign -- Assigns a value to the collection from another existing collection
collection->assignElem -- Assigns a value to the element of the collection
collection->getElem -- Returns value of the element
collection->max -- Gets the maximum number of elements in the collection
collection->size -- Returns size of the collection
collection->trim -- Trims elements from the end of the collection
oci_commit -- Commits outstanding statements
oci_connect -- Establishes a connection to Oracle server
oci_define_by_name --  Uses a PHP variable for the define-step during a SELECT
oci_error -- Returns the last error found
oci_execute -- Executes a statement
oci_fetch_all -- Fetches all rows of result data into an array
oci_fetch_array -- Returns the next row from the result data as an associative or numeric array, or both
oci_fetch_assoc -- Returns the next row from the result data as an associative array
oci_fetch_object -- Returns the next row from the result data as an object
oci_fetch_row -- Returns the next row from the result data as a numeric array
oci_fetch -- Fetches the next row into result-buffer
oci_field_is_null -- Checks if the field is NULL
oci_field_name -- Returns the name of a field from the statement
oci_field_precision -- Tell the precision of a field
oci_field_scale -- Tell the scale of the field
oci_field_size -- Returns field's size
oci_field_type_raw -- Tell the raw Oracle data type of the field
oci_field_type -- Returns field's data type
collection->free -- Frees resources associated with collection object
descriptor->free -- Frees resources associated with descriptor
oci_free_statement --  Frees all resources associated with statement or cursor
oci_internal_debug -- Enables or disables internal debug output
lob->append -- Appends data from the large object to another large object
lob->close -- Closes LOB descriptor
oci_lob_copy -- Copies large object
lob->eof -- Tests for end-of-file on a large object's descriptor
lob->erase -- Erases a specified portion of the internal LOB data
lob->export -- Exports LOB's contents to a file
lob->flush -- Flushes/writes buffer of the LOB to the server
lob->import -- Imports file data to the LOB
oci_lob_is_equal -- Compares two LOB/FILE locators for equality
lob->load -- Returns large object's contents
lob->read -- Reads part of large object
lob->rewind -- Moves the internal pointer to the beginning of the large object
lob->save -- Saves data to the large object
lob->seek -- Sets the internal pointer of the large object
lob->size -- Returns size of large object
lob->tell -- Returns current position of internal pointer of large object
lob->truncate -- Truncates large object
lob->writeTemporary -- Writes temporary large object
lob->write -- Writes data to the large object
oci_new_collection -- Allocates new collection object
oci_new_connect -- Establishes a new connection to the Oracle server
oci_new_cursor -- Allocates and returns a new cursor (statement handle)
oci_new_descriptor -- Initializes a new empty LOB or FILE descriptor
oci_num_fields --  Returns the number of result columns in a statement
oci_num_rows -- Returns number of rows affected during statement execution
oci_parse -- Prepares Oracle statement for execution
oci_password_change -- Changes password of Oracle's user
oci_pconnect -- Connect to an Oracle database using a persistent connection
oci_result -- Returns field's value from the fetched row
oci_rollback -- Rolls back outstanding transaction
oci_server_version -- Returns server version
oci_set_prefetch -- Sets number of rows to be prefetched
oci_statement_type -- Returns the type of an OCI statement
OCIBindByName -- Oracle プレースホルダーに PHP 変数をバインドする
OCICancel -- カーソルからの読み込みをキャンセルする
ocicloselob -- Closes lob descriptor
OCICollAppend -- Coming soon.
OCICollAssign -- Coming soon.
OCICollAssignElem -- Coming soon.
OCICollGetElem -- Coming soon.
OCICollMax -- Coming soon.
OCICollSize -- Coming soon.
OCICollTrim -- Coming soon.
OCIColumnIsNULL -- 結果カラムが NULL であるかどうかを確認する
OCIColumnName -- カラムの名前を返す
OCIColumnPrecision -- Coming soon.
OCIColumnScale -- Coming soon.
OCIColumnSize -- 結果カラムサイズを返す
OCIColumnType -- カラムのデータ型を返す
OCIColumnTypeRaw -- Coming soon.
OCICommit -- 未解決のトランザクションをコミットする
OCIDefineByName -- SELECT 実行中、定義用の PHP 変数を使用する
OCIError --  stmt|conn|globalに関する直近のエラーを返す。 エラーが生じていない場合はFALSEを返す。
OCIExecute -- 文を実行する
OCIFetch -- 結果バッファーの次の行を取得する
OCIFetchInto -- 結果配列の次の行を取得する
OCIFetchStatement -- 結果データの全ての行を配列に取得する
OCIFreeCollection -- Coming soon.
OCIFreeCursor -- カーソルに関連づけられた全リソースを開放する
OCIFreeDesc -- ラージオブジェクト記述子を削除する
OCIFreeStatement -- ある文に関連する全リソースを開放する
lob->getBuffering -- Returns current state of buffering for large object
OCIInternalDebug --  内部デバッグ用出力有効または無効にする。デフォルトでは無効
OCILoadLob -- Coming soon.
OCILogOff -- Oracleとの接続を切る
OCILogon -- Oracle への接続を確立する
OCINewCollection -- Coming soon.
OCINewCursor --  新規カーソル(命令ハンドル)を返す - 参照カーソルをバインドするために使用する
OCINewDescriptor --  空の新規ディスクリプタLOB/FILE(LOBがデフォルト)を初期化する
OCINLogon -- Oracle データベースに接続し、新規接続にログオン、 新規セッションを返す
OCINumCols -- ある文における結果のカラム数を返す
OCIParse -- クエリーをパースし、ステートメントを返す
OCIPLogon --  持続的接続を使用してOracle データベースに接続、ログオンする。 新しいセッションを返す。
OCIResult -- 取得された行におけるカラムの値を得る
OCIRollback -- 未解決のトランザクションをロールバックする
OCIRowCount -- 作用された行の数を得る
OCISaveLob -- Coming soon.
OCISaveLobFile -- Coming soon.
OCIServerVersion -- サーバーのバージョン情報を有する文字列を返す
lob->setBuffering -- Changes current state of buffering for large object
OCISetPrefetch -- 事前取得するレコード数を設定
OCIStatementType -- OCI 命令の型を返す
OCIWriteLobToFile -- Coming soon.
ociwritetemporarylob -- Writes temporary blob