XCI. Funciones de Oracle 8

Introducción

Estas funciones le permiten acceder a bases de datos Oracle9, Oracle8 y Oracle7. Usan la Interfaz de Llamadas Oracle (OCI por sus siglas en Inglés).

Esta extensión es más flexible que la extensión antigua de Oracle. Ésta soporta la vinculación de variables PHP globales y locales con recipientes Oracle, tiene soporte completo LOB, FILE y ROWID, y le permite usar variables de definición entregadas por el usuario. Es recomendable usar esta extensión en lugar de la extensión antigua de Oracle siempre que sea posible.

Requirimientos

Es necesario contar con las bibliotecas de cliente Oracle para usar esta extensión. Los usuarios de Windows necesitan por lo menos la versión 8.1 de Oracle para usar php_oci8.dll.

Antes de usar esta extensión, asegúrese de haber configurado apropiadamente sus variables de entorno Oracle para que correspondan con el usuario de Oracle, así como su usuario del demonio web. Las variables que necesita definir son las siguientes:

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

Después de definir las variables de entorno para su usuario de servidor web, asegúrese también de agregar al usuario del servidor web (nobody, www) al grupo oracle.

Si su servidor web no arranca, o falla al arrancar: Verifique que Apache esté enlazado con la 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)

Si libpthread no se encuentra en la lista, necesita re-instalar Apache:

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

Por favor note que en algunos sistemas, como UnixWare, se trata de libthread en lugar de libpthread. PHP y Apache deben configurarse con EXTRA_LIBS=-lthread.

Instalación

You have to compile PHP with the option --with-oci8[=DIR], where DIR defaults to your environment variable ORACLE_HOME.

If you're using Oracle Instant Client, you need to build PHP with the option --with-oci8-instant-client[=DIR]. Note that Oracle Instant Client support first appeared in versions 4.3.11 and 5.0.4.

Configuración en tiempo de ejecución

Esta extensión no tiene directivas de configuración en php.ini.

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

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

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.

Ejemplos

Ejemplo 1. Consejos OCI

<?php
// por sergo arroba bacup punto ru

// Use la opcion OCI_DEFAULT en el comando de ejecucion para aplazar
// la ejecucion
OCIExecute($sentencia, OCI_DEFAULT);

// para recuperar datos use (despues de fetch):

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

// Para una sentencia INSERT o UPDATE use:

$sql = "insert into tabla (campo1, campo2) values (campo1 = 'valor',
campo2 = empty_clob()) returning campo2 into :campo2"
;
OCIParse($con, $sql);
$clob = OCINewDescriptor($con, OCI_D_LOB);
OCIBindByName($sentencia, ":campo2", &$clob, -1, OCI_B_CLOB);
OCIExecute($sentencia, OCI_DEFAULT);
$clob->save("cualquier texto");
OCICommit($con);

?>

Es posible acceder fácilmente a procedimientos almacenados en la misma forma en que lo haría desde la línea de comandos.

Ejemplo 2. Uso de Procedimientos Almacenados

<?php
// por webmaster arroba remoterealty punto com
$sth = OCIParse($dbh, "begin proc_nueva_dir( :id_direccion, '$nombre',
'$apellido', '$companyia', '$dir1', '$dir2', '$ciudad', '$estado',
'$cod_postal', '$pais', :cod_error );end;"
);

// Esto llama al procedimiento almacenado proc_nueva_dir, en donde
// :id_direccion es una variable de entrada/salida y :cod_error es una
// variable de salida.
// Entonces crea la vinculacion:

   
OCIBindByName($sth, ":id_direccion", $id_direccion, 10);
   
OCIBindByName($sth, ":cod_error", $cod_error, 10);
   
OCIExecute($sth);

?>

Tabla de contenidos
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 -- Enlaza una variable PHP a un Placeholder de Oracle
ocicancel -- Cancel reading from cursor
ocicloselob -- Closes lob descriptor
ocicollappend -- Append an object to the collection
ocicollassign -- Assign a collection from another existing collection
ocicollassignelem -- Assign element val to collection at index ndx
ocicollgetelem -- Retrieve the value at collection index ndx
ocicollmax -- Gets the maximum number of elements in the collection
ocicollsize -- Return the size of a collection
ocicolltrim -- Trim num elements from the end of a collection
OCIColumnIsNULL -- comprueba si una una columna es NULL
OCIColumnName -- Devuelve el nombre de una columna.
ocicolumnprecision -- Tell the precision of a column
ocicolumnscale -- Tell the scale of a column
OCIColumnSize -- devuelve el tamaño de la columna
OCIColumnType -- Devuelve el tipo de dato de una columna.
ocicolumntyperaw -- Tell the raw oracle data type of a column
OCICommit -- Confirma transacciones pendientes
OCIDefineByName --  Usa una variable de PHP para el define-step durante una sentencia SELECT
OCIError -- Devuelve el último error de stmt|conn|global. Si no ocurre ningún error devuelve falso.
OCIExecute -- Ejecuta una sentencia
OCIFetch -- Busca la siguiente fila en el result-buffer
OCIFetchInto -- Busca la siguiente fila dentro del result-array
OCIFetchStatement -- Busca todas la filas de un resultset dentro de un array.
ocifreecollection -- Deletes collection object
OCIFreeCursor -- Libera todos los recursos asociados con cursor.
ocifreedesc -- Deletes a large object descriptor
OCIFreeStatement -- Libera todos los recursos asociados con una sentencia.
lob->getBuffering -- Returns current state of buffering for large object
OCIInternalDebug --  Habilita o deshabilita la salida del depurador interno. Por defecto este está deshabiltado
ociloadlob -- Loads a large object
OCILogOff -- Termina la conexion con Oracle
ocilogon -- Establece una conexión con Oracle
ocinewcollection -- Initialize a new collection
OCINewCursor -- devuelve un cursor nuevo (Statement-Handle) - use esto para enlazar ref-cursors!
OCINewDescriptor -- Inicializa un nuevo descriptor vacío LOB/FILE (LOB por defecto)
ocinlogon -- Establece una nueva conexión con Oracle
OCINumCols -- Devuelve el número de columnas resultantes en una sentencia
OCIParse -- Analiza una consulta y devuelve una sentencia
ociplogon --  Conectarse con una base de datos Oracle usando una conexión persistente
OCIResult -- Devuelve el valor de una columna en la fila buscada
OCIRollback -- Restablece todas las transaciones sin confirmar
OCIRowCount -- Obtiene el número de filas afectadas
ocisavelob -- Saves a large object
ocisavelobfile -- Saves a large object file
OCIServerVersion -- Devuelve una cadena conteniendo información a cerca de la version del servidor.
lob->setBuffering -- Changes current state of buffering for large object
ocisetprefetch -- Sets number of rows to be prefetched
OCIStatementType -- Devuelve el tipo de una sentencia OCI.
ociwritelobtofile -- Saves a large object file
ociwritetemporarylob -- Writes temporary blob

Hosting by: hurra.com
Generated: 2007-01-26 18:00:53