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

Dependências

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ções em execução

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

Constantes pré-definidas

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

?>

Índice
oci_bind_by_name --  Binds the PHP variable to the Oracle placeholder
oci_cancel -- Cancels reading from cursor
oci_close -- Closes Oracle connection
OCI-Collection->append -- Appends an object to the collection
OCI-Collection->assign -- Assigns a value to the collection from another existing collection
OCI-Collection->assignElem -- Assigns a value to the element of the collection
OCI-Collection->getElem -- Returns value of the element
OCI-Collection->free -- Frees resources associated with collection object
OCI-Collection->max -- Gets the maximum number of elements in the collection
OCI-Collection->size -- Returns size of the collection
OCI-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
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 --  Passa variáveis PHP para um ambiente de armazenamento do Oracle
ocicancel -- Cancela leitura de um cursor
ocicloselob -- Fecha um lob
ocicollappend -- Insere um objeto em uma coleção
ocicollassign -- Fixa uma coleção para outra coleção existente
ocicollassignelem -- Fixa elementos val para coleções em index ndx
ocicollgetelem -- Retorna o valor contido em coleção index ndx
ocicollmax --  Retorna o valor máximo de uma coleção. Para um array este é o comprimento máximo de um array
ocicollsize -- Retorna o tamanho de uma coleção
ocicolltrim -- Corta um número de elementos do final de uma coleção
ocicolumnisnull -- Testa se o resultado de uma coluna é NULL
ocicolumnname -- Retorna o nome de uma coluna
ocicolumnprecision -- Diz a precisão de uma coluna
ocicolumnscale -- Diz a escala de uma coluna
ocicolumnsize -- Retorna o tamanho de uma coluna
ocicolumntype -- Retorna o tipo de dados de uma coluna
ocicolumntyperaw -- Diz um tipo de dados indefinido de uma coluna Oracle
ocicommit -- Valida uma transação pendente
ocidefinebyname --  Usa uma variável PHP para a definição de passos durante um SELECT
ocierror -- Retorna o último erro de stmt|conn|global
ociexecute -- Executa um bloco de comando
ocifetch -- Traz a próximo linha em um result-buffer
ocifetchinto -- Traz a poxima linha em um array
ocifetchstatement -- Traz todas as linhas de um tipo de dados em um array
ocifreecollection -- Deleta uma coleção de objeto
ocifreecursor --  Libera todos os recursos associados à um cursor
ocifreedesc -- Deleta um grande objeto de descrição
ocifreestatement --  Libera todos os recursos associados à uma declaração
lob->getBuffering -- Returns current state of buffering for large object
ociinternaldebug --  Habilita ou desabilita o sistema interno de debug
ociloadlob -- Carrega um objeto grande
ocilogoff -- Disconecta de um servidor Oracle
ocilogon -- Estabiliza uma conexão com o Oracle
ocinewcollection -- Inicializa uma nova coleção
ocinewcursor --  Retorna um novo cursor (Statement-Handle)
ocinewdescriptor --  Inicializa um novo descritor LOB ou FILE vazios
ocinlogon -- Estabiliza uma nova conexão com o Oracle
ocinumcols --  Retorna o número de colunas encontradas em uma instrução
ociparse -- Interpreta uma query e retorna uma declaração Oracle
ociplogon --  Conecta no Oracle usando uma conexão persistente
ociresult -- Retorna valores de colunas trazidas por uma linha
ocirollback -- Volta uma transação
ocirowcount -- Retorna o número de linhas afetadas
ocisavelob -- Salva o alargamento do objeto
ocisavelobfile -- Salva o alargamento de objeto para um arquivo
ociserverversion -- Retorna uma string contendo informações da versão do servidor
lob->setBuffering -- Changes current state of buffering for large object
ocisetprefetch -- Seta o número de linhas a serem trazidas
ocistatementtype -- Retorna o tipo de uma declaração OCI
ociwritelobtofile -- Salva um grande objeto para arquivo
ociwritetemporarylob -- Escreve um blob temporário