Функции для работы с Oracle

Введение

Эти функции позволяют вам работать с Oracle версий 10/9/8/7. Для этого используется библиотека Oracle Call Interface (OCI).

Данный модуль много гибче прежнего. Он содержит функции привязки переменных PHP к соответствующим меткам Oracle, расширенную поддержка LOB, FILE и ROWID. Использование этого модуля рекомендуется вместо старого модуля.

Требования

Вам понадобятся клиентские библиотеки Oracle для того, чтобы использовать этот модуль. Пользователям Windows будут необходимы библиотеки минимум версии 10 для того, чтобы использовать php_oci8.dll.

Мы рекомендуем вам использовать Oracle Instant Client, доступный по адресу » http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html. Для использования модуля OCI8 достаточно установить "basic" версию пакета Oracle Instant Client. Instant Client не требует установки переменных ORACLE_SID или ORACLE_HOME. Однако, вам возможно понадобится установить переменные окружения LD_LIBRARY_PATH и NLS_LANG.

Перед использованием этого модуля, проверьте, что вы установили все необходимые переменные окружения. Эти переменные, перечисленные ниже, должны быть доступны пользователю Oracle и пользователю, с правами которого работает веб-сервер. Переменные окружения, необходимые для корректной работы с Oracle:

  • ORACLE_HOME
  • ORACLE_SID
  • LD_PRELOAD
  • LD_LIBRARY_PATH
  • NLS_LANG
  • ORA_NLS33

После установки среды окружения для веб-сервера, добавьте пользователя, с правами которого работает веб-сервер, в группу oracle.

Если ваш веб-сервер не стартует или возвращает ошибку при старте: Проверьте, что 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, вместо libthread присутствует libpthread. PHP и Apache также должны быть собраны с EXTRA_LIBS=-lthread.

Установка

PHP должен быть сконфигурирован с опцией --with-oci8[=DIR], где DIR соответствует директории, в которой находится установленный ранее сервер и/или клиент Oracle. По умолчанию значение DIR соответствует переменной окружения ORACLE_HOME.

Если вы используете Oracle Instant Client, то для поддержки модуля OCI8 нужно, чтобы PHP был сконфигурирован с опцией --with-oci8-instant-client[=DIR]. Обратите внимание: поддержка Oracle Instant Client появилась только начиная с версий 4.3.11 и 5.0.4.

Настройка во время выполнения

Данное расширение не определяет никакие директивы конфигурации в php.ini.

Типы ресурсов

Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

OCI_DEFAULT (integer)
Режим выполнения выражения SQL. В этом режиме транзакция не завершается автоматически оператором COMMIT.
OCI_DESCRIBE_ONLY (integer)
Режим выполнения выражения SQL. Используйте этот режим, если вы хотите получить данные о выполнении запроса, а не выполнить сам запрос.
OCI_COMMIT_ON_SUCCESS (integer)
Режим выполнения выражения SQL. Транзакция автоматически завершается вызовом оператора COMMIT после выполнения oci_execute().
OCI_EXACT_FETCH (integer)
Режим получения результатов запроса. Используется в том случае, если приложению известно заранее сколько строк будет получено в результате. Oracle 8 и более поздние версии не используют выборку результатов с упреждением в этом режиме, а курсоры уничтожаются автоматически после выборки ожидаемого количества строк, что может уменьшить требования сервера к ресурсам.
OCI_SYSDATE (integer)
OCI_B_BFILE (integer)
Используется функцией oci_bind_by_name() для привязки переменных типа BFILE.
OCI_B_CFILEE (integer)
Используется функцией oci_bind_by_name() для привязки переменных типа CFILE.
OCI_B_CLOB (integer)
Используется функцией oci_bind_by_name() для привязки переменных типа CLOB.
OCI_B_BLOB (integer)
Используется функцией oci_bind_by_name() для привязки переменных типа BLOB.
OCI_B_ROWID (integer)
Используется функцией oci_bind_by_name() для привязки переменных типа ROWID.
OCI_B_CURSOR (integer)
Используется функцией oci_bind_by_name() для привязки курсоров, созданных ранее с помощью oci_new_cursor().
OCI_B_NTY (integer)
Используется функцией oci_bind_by_name() для привязки именованных типов данных. В PHP < 5.0 эта константа называлась OCI_B_SQLT_NTY.
OCI_B_BIN (integer)
SQLT_BFILEE (integer)
То же, что и OCI_B_BFILE.
SQLT_CFILEE (integer)
То же, что и OCI_B_CFILEE.
SQLT_CLOB (integer)
То же, что и OCI_B_CLOB.
SQLT_BLOB (integer)
То же, что и OCI_B_BLOB.
SQLT_RDD (integer)
То же, что и OCI_B_ROWID.
SQLT_NTY (integer)
То же, что и OCI_B_NTY.
OCI_FETCHSTATEMENT_BY_COLUMN (integer)
Режим oci_fetch_all() по умолчанию.
OCI_FETCHSTATEMENT_BY_ROW (integer)
Альтернативный режим oci_fetch_all().
OCI_ASSOC (integer)
Используется с oci_fetch_all() и oci_fetch_array() для получения ассоциативного массива.
OCI_NUM (integer)
Используется с oci_fetch_all() и oci_fetch_array() для получения массива с числовыми индексами.
OCI_BOTH (integer)
Используется с oci_fetch_all() и oci_fetch_array() для получения массива с ассоциативными и числовыми индексами.
OCI_RETURN_NULLS (integer)
Используется с oci_fetch_array() для получения пустых элементов массива, если соответствующее поле в результате равно NULL.
OCI_RETURN_LOBS (integer)
Используется oci_fetch_array() для получения содержания объекта LOB вместо дескриптора.
OCI_DTYPE_FILE (integer)
Флаг используется oci_new_descriptor() для инициализации дескриптора типа FILE.
OCI_DTYPE_LOB (integer)
Флаг используется oci_new_descriptor() для инициализации дескриптора типа LOB.
OCI_DTYPE_ROWID (integer)
Флаг используется oci_new_descriptor() для инициализации дескриптора типа ROWID.
OCI_D_FILE (integer)
То же, что и OCI_DTYPE_FILE.
OCI_D_LOB (integer)
То же, что и OCI_DTYPE_LOB.
OCI_D_ROWID (integer)
То же, что и OCI_DTYPE_ROWID.

Примеры

Примеры использования

?php
// by sergo at bacup dot ru

// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmt, OCI_DEFAULT);

// for retrieve data use (after fetch):

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

// For INSERT or UPDATE statement use:

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

?>

Вы можете использовать хранимые процедуры так же, как это делается из командной строки.

Использование хранимых процедур

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

// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable.
// Then you do the binding:

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

?>
Кол-во строк: 
Заголовок Дата изменения Хиты
ocicolltrim 10 Январь 2011 134
ocicollsize 10 Январь 2011 138
ocicollmax 10 Январь 2011 165
ocicollgetelem 10 Январь 2011 149
ocicollassignelem 10 Январь 2011 147
ocicollassign 10 Январь 2011 156
ocicollappend 10 Январь 2011 152
ocicloselob 10 Январь 2011 162
ocicancel 10 Январь 2011 140
ocibindbyname 10 Январь 2011 176
oci_statement_type 10 Январь 2011 123
oci_set_prefetch 10 Январь 2011 109
oci_server_version 10 Январь 2011 104
oci_rollback 10 Январь 2011 146
oci_result 10 Январь 2011 119
oci_pconnect 10 Январь 2011 138
oci_password_change 10 Январь 2011 122
oci_parse 10 Январь 2011 104
oci_num_rows 10 Январь 2011 139
oci_num_fields 10 Январь 2011 129
oci_new_descriptor 10 Январь 2011 129
oci_new_cursor 10 Январь 2011 136
oci_new_connect 10 Январь 2011 133
oci_new_collection 10 Январь 2011 111
lob->write 10 Январь 2011 170
lob->truncate 10 Январь 2011 111
lob->tell 10 Январь 2011 132
lob->size 10 Январь 2011 110
lob->seek 10 Январь 2011 112
lob->save 10 Январь 2011 113
Copyright © 2004 - 2012 Oftob.com
Professional Joomla Templates - 888 Poker Review
Mail.Ru