Manual do PHP
Anterior |  | Próxima

# LXXIV. Funções do Oracle 8

# Introdução

Essas funções permitem que você acesse Banco de Dados Oracle8 and Oracle7. Elas usam uma interface de comunicação para Oracle8 chamada (OCI8)

Essa extensão é mais flexível do que a extensão standard Oracle. Ela tem suporte para passar variáveis PHP locais e globais para o "Oracle placeholders", tem suporte completo à LOB, FILE e ROWID e permite que você use variáveis definidas pelo usuário.

# Requisitos

Você irá precisar de bibliotecas do cliente Oracle8 para usar esta extensão. Usuários Windows irão precisar das últimas versões do Oracle 8.1 para usar a `php_oci8.dll` dll.

Antes de usar esta extensão, tenha certeza de que você tem setado sua variável de ambiente Oracle corretamente para seu usuário Oracle, bem como para seu usuário do seu web daemon. As variáveis que você pode precisar setar são as seguintes:

- ORACLE_HOME

- ORACLE_SID

- LD_PRELOAD

- LD_LIBRARY_PATH

- NLS_LANG

- ORA_NLS33

Após setá-las para seu usuário de webserver, tenha certeza também de adicionar seu usuário do webserver (nobody, www) para o grupo oracle.

> Se seu servidor web não iniciar ou colidir ao iniciar: Verifique que o Apache está "linkado" com a biblioteca 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)

> Se a libpthread não estiver listada você terá de recompilar o Apache:

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

> Por favor note que em alguns sistemas como UnixWare isto é libthread ao invés de libpthread. PHP e Apache estão configurados com EXTRA_LIBS=-lthread.

# Instalação

Você tem que compilar o PHP com a opção `--with-oci8[=DIR]`, onde DIR é a variável de ambiente ORACLE_HOME.

# Configuração durante execução

Esta extensão não define nenhum parâmetro de configuração no `php.ini`.

# Tipos Resource

# Constantes Predefinidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

`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`.

# Exemplos

Exemplo 1. OCI Hints

`<?php
// by sergo@bacup.ru
// Use a opção: OCI_DEFAULT para executar comandos para atrasar a execução
OCIExecute($stmt, OCI_DEFAULT);
// use isto para retornar dados (após o fetch):
$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();
// Para comandos INSERT ou UPDATE 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);
?>`

Você pode facilmente acessar stored procedures da mesma forma como você faz em linha de comando.

Exemplo 2. Usando Stored Procedures

`<?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;" );
// Essa chamada stored procedure sp_newaddress, com :address_id being uma
// variável in/out e :error_code sendo uma variável de saída.
// Então você faz a passagem
OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
OCIExecute ( $sth );
?>`

Anterior | Principal | Próxima
deaggregate | Acima | oci_bind_by_name