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.
Nota: 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.
Tipos Resource
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 execute the query, but get the select-list's 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. Note: in PHP < 5.0 it was called OCI_B_SQLT_NTY.
- 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.
- SQLT_LNG (integer)
- Used with oci_bind_by_name() to bind LONG values.
- SQLT_LBI (integer)
- Used with oci_bind_by_name() to bind LONG RAW values.
- SQLT_BIN (integer)
- Used with oci_bind_by_name() to bind RAW values.
- SQLT_NUM (integer)
- Used with oci_bind_array_by_name() to bind arrays of NUMBER.
- SQLT_INT (integer)
- Used with oci_bind_array_by_name() to bind arrays of INTEGER.
- SQLT_AFC (integer)
- Used with oci_bind_array_by_name() to bind arrays of CHAR.
- SQLT_CHR (integer)
- Used with oci_bind_array_by_name() to bind arrays of VARCHAR2. Also used with oci_bind_by_name().
- SQLT_VCS (integer)
- Used with oci_bind_array_by_name() to bind arrays of VARCHAR.
- SQLT_AVC (integer)
- Used with oci_bind_array_by_name() to bind arrays of CHARZ.
- SQLT_STR (integer)
- Used with oci_bind_array_by_name() to bind arrays of STRING.
- SQLT_LVC (integer)
- Used with oci_bind_array_by_name() to bind arrays of LONG VARCHAR.
- SQLT_FLT (integer)
- Used with oci_bind_array_by_name() to bind arrays of FLOAT.
- SQLT_ODT (integer)
- Used with oci_bind_array_by_name() to bind arrays of LONG.
- SQLT_BDOUBLE (integer)
- SQLT_BFLOAT (integer)
- 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.
- OCI_SYSOPER (integer)
- Used with oci_connect() to connect as SYSOPER using external credentials (oci8.privileged_connect should be enabled for this).
- OCI_SYSDBA (integer)
- Used with oci_connect() to connect as SYSDBA using external credentials (oci8.privileged_connect should be enabled for this).
- OCI_LOB_BUFFER_FREE (integer)
- Used with OCI-Lob->flush to free buffers used.
- OCI_TEMP_CLOB (integer)
- Used with OCI-Lob->writeTemporary to indicate explicilty that temporary CLOB should be created.
- OCI_TEMP_BLOB (integer)
- Used with OCI-Lob->writeTemporary to indicate explicilty that temporary BLOB should be created.
Exemplos
Example#1 OCI Hints
<?php
// by [email protected]
// 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.
Example#2 Usando Stored Procedures
<?php
// by [email protected]
$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_array_by_name — Binds PHP array to Oracle PL/SQL array by name
- 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 element 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->free — Frees the resources associated with the collection object
- OCI-Collection->getElem — Returns value of the element
- OCI-Collection->max — Returns 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 the 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
- oci_free_statement — Frees all resources associated with statement or cursor
- oci_internal_debug — Enables or disables internal debug output
- OCI-Lob->append — Appends data from the large object to another large object
- OCI-Lob->close — Closes LOB descriptor
- oci_lob_copy — Copies large object
- OCI-Lob->eof — Tests for end-of-file on a large object's descriptor
- OCI-Lob->erase — Erases a specified portion of the internal LOB data
- OCI-Lob->export — Exports LOB's contents to a file
- OCI-Lob->flush — Flushes/writes buffer of the LOB to the server
- OCI-Lob->free — Frees resources associated with the LOB descriptor
- OCI-Lob->getBuffering — Returns current state of buffering for the large object
- OCI-Lob->import — Imports file data to the LOB
- oci_lob_is_equal — Compares two LOB/FILE locators for equality
- OCI-Lob->load — Returns large object's contents
- OCI-Lob->read — Reads part of the large object
- OCI-Lob->rewind — Moves the internal pointer to the beginning of the large object
- OCI-Lob->save — Saves data to the large object
- OCI-Lob->saveFile — Sinônimo de oci_lob_import
- OCI-Lob->seek — Sets the internal pointer of the large object
- OCI-Lob->setBuffering — Changes current state of buffering for the large object
- OCI-Lob->size — Returns size of large object
- OCI-Lob->tell — Returns current position of internal pointer of large object
- OCI-Lob->truncate — Truncates large object
- OCI-Lob->write — Writes data to the large object
- OCI-Lob->writeTemporary — Writes temporary large object
- OCI-Lob->writeToFile — Sinônimo de oci_lob_export
- 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 — Sinônimo de oci_bind_by_name
- ocicancel — Sinônimo de oci_cancel
- ocicloselob — Sinônimo de
- ocicollappend — Sinônimo de
- ocicollassign — Sinônimo de
- ocicollassignelem — Sinônimo de
- ocicollgetelem — Sinônimo de
- ocicollmax — Sinônimo de
- ocicollsize — Sinônimo de
- ocicolltrim — Sinônimo de
- ocicolumnisnull — Sinônimo de oci_field_is_null
- ocicolumnname — Sinônimo de oci_field_name
- ocicolumnprecision — Sinônimo de oci_field_precision
- ocicolumnscale — Sinônimo de oci_field_scale
- ocicolumnsize — Sinônimo de oci_field_size
- ocicolumntype — Sinônimo de oci_field_type
- ocicolumntyperaw — Sinônimo de oci_field_type_raw
- ocicommit — Sinônimo de oci_commit
- ocidefinebyname — Sinônimo de oci_define_by_name
- ocierror — Sinônimo de oci_error
- ociexecute — Sinônimo de oci_execute
- ocifetch — Sinônimo de oci_fetch
- ocifetchinto — Traz a poxima linha em um array
- ocifetchstatement — Sinônimo de oci_fetch_all
- ocifreecollection — Sinônimo de
- ocifreecursor — Sinônimo de oci_free_statement
- ocifreedesc — Sinônimo de
- ocifreestatement — Sinônimo de oci_free_statement
- ociinternaldebug — Sinônimo de oci_internal_debug
- ociloadlob — Sinônimo de
- ocilogoff — Sinônimo de oci_close
- ocilogon — Sinônimo de oci_connect
- ocinewcollection — Sinônimo de oci_new_collection
- ocinewcursor — Sinônimo de oci_new_cursor
- ocinewdescriptor — Sinônimo de oci_new_descriptor
- ocinlogon — Estabiliza uma nova conexão com o Oracle
- ocinumcols — Sinônimo de oci_num_fields
- ociparse — Sinônimo de oci_parse
- ociplogon — Sinônimo de oci_pconnect
- ociresult — Sinônimo de oci_result
- ocirollback — Sinônimo de oci_rollback
- ocirowcount — Sinônimo de oci_num_rows
- ocisavelob — Sinônimo de
- ocisavelobfile — Sinônimo de
- ociserverversion — Sinônimo de oci_server_version
- ocisetprefetch — Sinônimo de oci_set_prefetch
- ocistatementtype — Sinônimo de oci_statement_type
- ociwritelobtofile — Sinônimo de
- ociwritetemporarylob — Sinônimo de