LXX. Функции Oracle 8
Эти функции дают возможность доступа к БД Oracle8 и Oracle7.
Используется интерфейс Oracle8 Call-Interface (OCI8). Для использования
этого расширения вам понадобятся клиентские библиотеки Oracle8.
Это расширение более гибко, чем стандартное расширение Oracle. Оно
поддерживает связку глобальных и локальных переменных PHP с заглушками Oracle,
имеет полную поддержку LOB, FILE и ROWID и позволяет использовать
предоставленные пользователем определённые переменные.
Прежде чем использовать это расширение, убедитесь, что вы соответствующим
образом настроили ваши переменные окружения oracle для пользователя Oracle, а также для пользователя вашего web-демона.
Вот переменные, которые вам может понадобиться установить:
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
Пример 1. Подсказки по OCI
<?php
// от 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
// от webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, ’$firstname’,
’$lastname’, ’$company’, ’$address1’, ’$address2’, ’$city’, ’$state’,
’$postalcode’, ’$country’, :error_code );end;" );
// Это вызывает хранимую процедуру sp_newaddress с :address_id в
// in/out-переменной и :error_code в out-переменной.
// Затем вы выполняете связывание:
OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
OCIExecute ( $sth );
?>
Содержание
OCIBindByName - связывает PHP-переменную с заглушкой Oracle
OCICancel - отменяет чтение из курсора
OCICollAppend -
OCICollAssign -
OCICollAssignElem -
OCICollGetElem -
OCICollMax -
OCICollSize -
OCICollTrim -
OCIColumnIsNULL - тестирует, является ли результирующий столбец NULL
OCIColumnName - возвращает имя столбца
OCIColumnPrecision -
OCIColumnScale -
OCIColumnSize - возвращает размер результирующего столбца
OCIColumnType - возвращает тип данных столбца
OCIColumnTypeRaw -
OCICommit - подтверждает внешние транзакции
OCIDefineByName - использует PHP-переменную для шага define в операторе SELECT
OCIError - возвращает последнюю ошибку из stmt|conn|global
OCIExecute - выполняет оператор
OCIFetch - извлекает следующий ряд в result-буфер
OCIFetchInto - извлекает следующий ряд в result-массив
OCIFetchStatement - извлекает все ряды результирующих данных в массив
OCIFreeCollection -
OCIFreeCursor - освобождает все ресурсы, ассоциированные с курсором
OCIFreeDesc - удаляет дескриптор большого объекта/large object
OCIFreeStatement - освобождает все ресурсы, ассоциированные с оператором
OCIInternalDebug - включает или отключает вывод внутренней отладки
OCILoadLob -
OCILogOff - отсоединяет от Oracle
OCILogon - устанавливает соединение с Oracle
OCINewCollection -
OCINewCursor - возвращает новый курсор (Statement-Handle/оператор-дескриптор)
OCINewDescriptor - инициализирует новый пустой дескриптор LOB или FILE
OCINLogon - устанавливает новое соединение с Oracle
OCINumCols - возвращает количество результирующих столбцов в операторе
OCIParse - разбирает запрос/query и возвращает оператор
OCIPLogon - соединяется с БД Oracle с использованием постоянного соединения
OCIResult - возвращает значение столбца для извлечённого ряда
OCIRollback - откатывает неразрешённые транзакции
OCIRowCount - получает количество задействованных рядов
OCISaveLob -
OCISaveLobFile -
OCIServerVersion - возвращает строку, содержащую информацию о версии сервера
OCISetPrefetch - устанавливает количество предварительно извлечённых рядов
OCIStatementType - возвращает тип OCI-оператора
OCIWriteLobToFile -