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

Vous devez compiler PHP avec l'option --with-oci8[=DIR], où DIR vaut par défaut la variable d'environnement 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 (entier)

OCI_DESCRIBE_ONLY (entier)

OCI_COMMIT_ON_SUCCESS (entier)

OCI_EXACT_FETCH (entier)

SQLT_BFILEE (entier)

SQLT_CFILEE (entier)

SQLT_CLOB (entier)

SQLT_BLOB (entier)

SQLT_RDD (entier)

OCI_B_SQLT_NTY (entier)

OCI_SYSDATE (entier)

OCI_B_BFILE (entier)

OCI_B_CFILEE (entier)

OCI_B_CLOB (entier)

OCI_B_BLOB (entier)

OCI_B_ROWID (entier)

OCI_B_CURSOR (entier)

OCI_B_BIN (entier)

OCI_FETCHSTATEMENT_BY_COLUMN (entier)

OCI_FETCHSTATEMENT_BY_ROW (entier)

OCI_ASSOC (entier)

OCI_NUM (entier)

OCI_BOTH (entier)

OCI_RETURN_NULLS (entier)

OCI_RETURN_LOBS (entier)

OCI_DTYPE_FILE (entier)

OCI_DTYPE_LOB (entier)

OCI_DTYPE_ROWID (entier)

OCI_D_FILE (entier)

OCI_D_LOB (entier)

OCI_D_ROWID (entier)

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 à une variable SQL d'Oracle
ocicancel -- Termine la lecture de ressources Oracle
ocicloselob -- Ferme un descripteur de lob
ocicollappend -- Ajoute un objet à une collection Oracle
ocicollassign -- Assigne une collection depuis une autre collection Oracle
ocicollassignelem --  Assigne l'élément val à une collection Oracle à l'index ndx
ocicollgetelem --  Lit la valeur d'un élément d'une collection Oracle à l'index ndx
ocicollmax -- Retourne la plus grande valeur d'une collection Oracle
ocicollsize -- Retourne la taille d'une collection Oracle
ocicolltrim --  Supprime num éléments à la fin de la collection Oracle
ocicolumnisnull -- Teste si la valeur d'une colonne Oracle est NULL
ocicolumname -- Retourne le nom d'une colonne Oracle
ocicolumnprecision -- Lit la précision d'une colonne Oracle
ocicolumnscale -- Lit la taille d'une colonne Oracle
ocicolumnsize -- Retourne la taille d'une colonne Oracle
ocicolumntype -- Retourne le type de données d'une colonne Oracle
ocicolumntyperaw -- Lit directement le type de colonne Oracle
ocicommit -- Valide les transactions Oracle en cours
ocidefinebyname --  Utilise une variable PHP pour la phase de définition, dans une commande SELECT Oracle
ocierror --  Retourne la dernière erreur de stmt|conn|global sur Oracle
ociexecute -- Exécute une commande SQL Oracle
ocifetch --  Lit la prochaine ligne dans le résultat Oracle
ocifetchinto --  Retourne la ligne suivante d'un résultat Oracle dans un tableau
ocifetchstatement -- Retourne toutes les lignes d'un résultat Oracle
ocifreecollection -- Supprime une collection Oracle
ocifreecursor --  Libère toutes les ressources réservées par un résultat Oracle
ocifreedesc -- Détruit un pointeur de LOB Oracle
ocifreestatement --  Libère toutes les ressources occupées par une commande Oracle
ociinternaldebug --  Active ou désactive l'affichage des données de déboggage Oracle
ociloadlob -- Charge un LOB Oracle
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 par Oracle
ocisavelob -- Sauve un LOB Oracle
ocisavelobfile -- Sauve un fichier LOB Oracle
ociserverversion --  Retourne une chaîne contenant les informations de version du serveur Oracle
ocisetprefetch --  Indique le nombre de lignes qui doivent être pré-lues par Oracle
ocistatementtype -- Retourne le type de commande OCI
ociwritelobtofile -- Ecrit un LOB Oracle dans un fichier
ociwritetemporarylob -- Ecrit un blob temporaire