LVIII. Funzioni Oracle 8

Queste funzioni permettono di accedere ai database Oracle8 e Oracle7. Usano la Call-Interface di Oracle8 (OCI8). Occorre avere installate le librerie client di Oracle8 per utilizzare questa estensione.

Questa estensione è più flessibile della estensione standard di Oracle. Supporta il binding di variabili PHP locali e globali ai segnaposto Oracle, ha pieno supporto di LOB, FILE e ROWID e permette di utilizzare variabili di definizione personalizzabili.

Prima di usare questa estensione, occorre sicerarsi di aver impostato le variabili d'ambiente per l'utente Oracle, come pure per l'utente del server web. Le variabili che potrebbero necessitare l'impostazione sono le seguenti:

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

Dopo aver impostato le variabili d'ambiente per l'utente del server web, occorre sicerarsi di aver aggiunto anche l'utente stesso (nobody, www) al gruppo oracle.

Se il server web non parte o va in blocco: Controllare che apache sia linkato con la libreria 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 la libpthread non compare nell'elenco, occorre reinstallare Apache:


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

Esempio 1. OCI Hints


<?php
// by sergo@bacup.ru

// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmt, OCI_DEFAULT);

// for retrieve data use (after fetch):

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

// For INSERT or UPDATE statement 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);

?>
     

You can easily access stored procedures in the same way as you would from the commands line.

Esempio 2. Using 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;" );

// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable. 
// Then you do the binding:

   OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
   OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
   OCIExecute ( $sth );

?>
     

Sommario
OCIDefineByName --  Utilizza una variabile PHP per la fase di definizione in un comando SELECT
OCIBindByName --  Lega una variabile PHP ad un segnaposto Oracle
OCILogon -- Stabilisce una connessione a Oracle
OCIPLogon -- Stabilisce una connessione permanente a Oracle. Restituisce una nuova sessione.
OCINLogon -- Stabilisce, forzandola, una nuova connessione a Oracle. Restituisce una nuova sessione.
OCILogOff -- Disconnette da Oracle
OCIExecute -- Esegue un comando SQL
OCICommit -- Esegue le transazioni in sospeso
OCIRollback -- Annulla le transazioni in sospeso
OCINewDescriptor --  Inizializza un nuovo descrittore LOB/FILE vuoto (LOB ì il default)
OCIRowCount -- Restituisce il numero di tuple modificate
OCINumCols --  Restituisce il numero di campi che risultano da un comando SQL
OCIResult -- Restituisce il valore di campo della tupla estratta
OCIFetch -- Estrae la prossima tupla opnendola nel buffer di risultato.
OCIFetchInto -- Estrae la prossima tupla ponendola in un array
OCIFetchStatement -- Estrae tutte le tuple in un array.
OCIColumnIsNULL -- verifica se un campo di risultato è NULL
OCIColumnName -- Restituisce il nome di un campo.
OCIColumnSize -- restituisce la dimensione del campo
OCIColumnType -- Restituisce il tipo di dati di un campo.
OCIServerVersion -- Restituisce una stringa contenente informazioni sulla versione del server.
OCIStatementType -- Restituisce il tipo di un'istruzione OCI.
OCINewCursor --  restituisce un nuovo cursore (Statement-Handle) - usare questa per collegare un ref-cursors
OCIFreeStatement --  Libera tutte le risorse associate ad un'istruzione.
OCIFreeCursor --  Libera tutte le risorse associate ad un cursore.
OCIFreeDesc -- Cancella un descrittore di oggetto binario (LOB).
OCIParse -- Analizza una query e restituisce un'istruzione.
OCIError -- Restituisce l'ultimo errore di stmt|conn|global. Se non c'è stato errire, restituisce FALSE.
OCIInternalDebug --  Abilita o disabilita la visualizzazione del debug interno. Di default è disabilitata
OCICancel -- Interrompe la lettura del cursore
OCISetPrefetch -- imposta il numero di tuple da precaricare
OCIWriteLobToFile -- Coming soon.
OCISaveLobFile -- Coming soon.
OCISaveLob -- Coming soon.
OCILoadLob -- Coming soon.
OCIColumnScale -- Coming soon.
OCIColumnPrecision -- Coming soon.
OCIColumnTypeRaw -- Coming soon.
OCINewCollection -- Coming soon.
OCIFreeCollection -- Coming soon.
OCICollAssign -- Coming soon.
OCICollAssignElem -- Coming soon.
OCICollGetElem -- Coming soon.
OCICollMax -- Coming soon.
OCICollSize -- Coming soon.
OCICollTrim -- Coming soon.