LXXI. Oracle 8

Introduction

Ces fonctions vous permettront d'accéder aux serveurs Oracle8 et Oracle7. Elles utilisent l'interface Oracle8 Call-Interface (oci8). Vous aurez donc besoin des librairies clientes Oracle8 pour pouvoir les utiliser.

Il faut noter que cette extension est plus souple que l'extension Oracle officielle. Elle supporte notamment les liaisons entre les variables globales et locales de PHP avec des emplacements Oracle; elle supporte complètement les types LOB, FILE et ROWID et vous permet d'utiliser des variables de définitions personnalisables.

Pré-requis

Avant d'utiliser cette extension, assurez-vous que vous avez bien paramétré vos variables d'environnement Oracle, ainsi que votre démon utilisateur. Les variables dont vous pouvez avoir besoin sont :

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

Après avoir configuré ces variables pour votre utilisateur "serveur web", assurez-vous aussi d'ajouter cet utilisateur (nobody, www) au group Oracle.

Si votre serveur web ne démarre pas, ou crashe au démarrage : Vérifiez que Apache a bien été compilé avec la librairie pthread :

Exemple 1. Configuration Apache avec 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 la libpthread n'est pas listée, vous devez réinstaller Apache :

Exemple 2. Reinstaller Apache avec pthread

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

Notez bien que sur certains systèmes comme UnixWare il faut utiliser libthread au lieu de libpthread. PHP et Apache doivent alors être configurés avec EXTRA_LIBS=-lthread.

Installation

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

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

Types de ressources

Constantes Prédefinies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

OCI_DEFAULT (integer)

OCI_DESCRIBE_ONLY (integer)

OCI_COMMIT_ON_SUCCESS (integer)

OCI_EXACT_FETCH (integer)

SQLT_BFILEE (integer)

SQLT_CFILEE (integer)

SQLT_CLOB (integer)

SQLT_BLOB (integer)

SQLT_RDD (integer)

OCI_B_SQLT_NTY (integer)

OCI_SYSDATE (integer)

OCI_B_BFILE (integer)

OCI_B_CFILEE (integer)

OCI_B_CLOB (integer)

OCI_B_BLOB (integer)

OCI_B_ROWID (integer)

OCI_B_CURSOR (integer)

OCI_B_BIN (integer)

OCI_FETCHSTATEMENT_BY_COLUMN (integer)

OCI_FETCHSTATEMENT_BY_ROW (integer)

OCI_ASSOC (integer)

OCI_NUM (integer)

OCI_BOTH (integer)

OCI_RETURN_NULLS (integer)

OCI_RETURN_LOBS (integer)

OCI_DTYPE_FILE (integer)

OCI_DTYPE_LOB (integer)

OCI_DTYPE_ROWID (integer)

OCI_D_FILE (integer)

OCI_D_LOB (integer)

OCI_D_ROWID (integer)

Exemples

Exemple 3. Exemple avec OCI8

<?php
// par sergo@bacup.ru

// Utilisez l'option: OCI_DEFAULT pour ex&eacute;cuter la commande avec ex&eacute;cution
// retard&eacute;e.
OCIExecute($stmt, OCI_DEFAULT);

// pour lire les donn&eacute;es, apr&egrave;s un fetch : 

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

// Pour les commandes INSERT et UPDATE utilisez :

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

?>

Vous pouvez facilement accéder aux procédures stockées, de la même façon que vous le feriez par ligne de commande :

Exemple 4. Utilisation de procédures stockées

<?php
// par webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;" );

// Cela appelle la proc&eacute;dure stock&eacute;e sp_newaddress, avec la variable :address_id 
// pour les entr&eacute;es/sorties et :error_code comme variable de sortie.
// Ensuite, vous faites les liaisons suivantes : 

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

?>

Table des matières
ociBindByName --  Lie une variable PHP avec une requête SQL
ocicancel -- Libère les ressouces
ocicollappend -- Coming soon
ocicollassign -- Assigne une collection depuis une autre collection
ocicollassignelem -- Assigne l'élément val à une collection, à l'index ndx
ocicollgetelem -- Lit la valeur d'un élément d'une collection à l'index ndx
ocicollmax -- Retourne la plus grande valeur d'une collection
ocicollsize -- Retourne la taille d'une collection
ocicolltrim -- Supprime num éléments à la fin de la collection
ocicolumnisnull -- Teste si la valeur d'une colonne est NULL
ocicolumname -- Retourne le nom d'une colonne
ocicolumnprecision -- Lit la précision de la colonne
ocicolumnscale -- Lit la taille d'une colonne
ocicolumnsize -- Retourne la taille de la colonne
ocicolumntype -- Retourne le type de données d'une colonne
ocicolumntyperaw -- Lit directement le type de colonne Oracle
ociCommit -- Valide les transactions en cours
ociDefineByName --  Utilise une variable PHP pour la phase de définition, dans une commande SELECT
ocierror --  Retourne la dernière erreur de stmt|conn|global
ociexecute -- Exécute une commande
ocifetch --  Lit la prochaine ligne dans le résultat Oracle
ocifetchinto -- Retourne la ligne suivante dans un tableau
ocifetchstatement -- Retourne toutes les lignes d'un résultat
ocifreecollection -- Supprime une collection
ociFreeCursor --  Libère toutes les ressources réservées par un résultat Oracle
ocifreedesc -- Détruit un pointeur de LOB
ocifreestatement --  Libère toutes les ressources occupées par une commande
ociinternaldebug --  Active ou désactive l'affichage des données de debuggage.
ociloadlob -- Charge un LOB
ocilogoff -- Déconnecte d'un serveur Oracle
ocilogon -- Etablit une connexion à un serveur Oracle
ocinewcollection -- Initialise une nouvelle collection
ocinewcursor --  Retourne un nouveau pointeur à utiliser pour lier les pointeurs de références
ocinewdescriptor -- Initialise un nouveau pointeur vide de LOB/FILE
ocinlogon --  Etablit une nouvelle correction avec un serveur Oracle
ocinumcols -- Retourne le nombre de colonnes dans un résultat
ociparse -- Analyse une requête SQL avec Oracle
ociplogon -- Ouvre une connexion persistante à un serveur Oracle
ociresult -- Retourne la valeur d'une colonne dans un résultat Oracle
ocirollback -- Annule les transactions Oracle en cours
ocirowcount -- Retourne le nombre de lignes affectées
ocisavelob -- Sauve un LOB
ocisavelobfile -- Sauve un LOB fichier
ociserverversion --  Retourne une chaîne contenant les informations de version du serveur Oracle
ocisetprefetch -- Indique le nombre de lignes qui doivent être pré-lues
ocistatementtype -- Retourne le type de commande OCI
ociwritelobtofile -- Ecrit un LOB dans un fichier