LXXXVII. 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 bibliothèques clientes Oracle8 pour pouvoir les utiliser.

Il faut noter que cette extension est plus souple que l'ancienne extension Oracle. 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. Il est recommandé d'utiliser cette fonction plutôt que l'ancienne extension Oracle.

Pré-requis

Vous avez besoin des bibliothèques Oracles pour utiliser cette extension. Les utilisateur Windows doivent avoir Oracle version 8.1, et se servir de la bibliothèque php_oci8.dll.

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

Si votre serveur web ne démarre pas ou plante au démarrage avec Oracle : Vérifiez que Apache a bien été compilé avec la bibliothèque 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.

Si vous utilisez le client Oracle Instant, vous devez compiler PHP avec l'option de configuration --with-oci8-instant-client[=DIR]. Notez que le client Oracle Instant est apparu pour la première fois en PHP 4.3.11 et PHP 5.0.4.

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

Constantes pré-définies

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)

Mode d'exécution des commandes. La commande n'est pas validée automatiquement lorsqu'on utilise ce mode.

OCI_DESCRIBE_ONLY (entier)

Mode d'exécution des commandes. Utilisez ce mode si vous ne souhaitez pas exécuter la commande, mais simplement obtenir des descriptions.

OCI_COMMIT_ON_SUCCESS (entier)

Mode d'exécution des commandes. La commande est automatiquement validée après oci_execute().

OCI_EXACT_FETCH (entier)

Mode de lecture de résultats. Utilisé lorsque les applications savent à l'avance le nombre de ligne qu'il faudra lire. Ce mode désactive la lecture anticipée d'Oracle version 8 et plus récente. Le curseur est annulé une fois que le nombre de lignes à lire a été atteint, et cela réduit les ressources consommées côté serveur.

OCI_SYSDATE (entier)

SQLT_BFILEE (entier)

Utilisé avec la fonction oci_bind_by_name() pour relier des fichiers BFILE.

SQLT_CFILEE (entier)

Utilisé avec la fonction oci_bind_by_name() pour relier des fichiers CFILE.

OCI_B_CLOB (entier)

Utilisé avec oci_bind_by_name() pour relier des CLOB.

OCI_B_BLOB (entier)

Utilisé avec oci_bind_by_name() pour relier des BLOB.

OCI_B_ROWID (entier)

Utilisé avec oci_bind_by_name() pour relier des ROWID.

OCI_B_CURSOR (entier)

Utilisé avec oci_bind_by_name() pour relier des curseurs, précédemment alloués avec oci_new_descriptor().

OCI_B_NTY (entier)

Utilisé avec oci_bind_by_name() pour relier des noms de types de données.

OCI_B_BIN (entier)

SQLT_BFILEE (entier)

Identique à OCI_B_BFILE.

SQLT_CFILEE (entier)

Identique à OCI_B_CFILEE.

SQLT_CLOB (entier)

Identique à OCI_B_CLOB.

SQLT_BLOB (entier)

Identique à OCI_B_BLOB.

SQLT_RDD (entier)

Identique à OCI_B_ROWID.

SQLT_NTY (entier)

Identique à OCI_B_NTY.

OCI_FETCHSTATEMENT_BY_COLUMN (entier)

Mode par défaut de oci_fetch_all().

OCI_FETCHSTATEMENT_BY_ROW (entier)

Mode alternatif pour oci_fetch_all().

OCI_ASSOC (entier)

Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau associatif.

OCI_NUM (entier)

Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau énuméré.

OCI_BOTH (entier)

Utilisé avec oci_fetch_all() et oci_fetch_array() pour lire un tableau associatif et énuméré.

OCI_RETURN_NULLS (entier)

Utilisé avec oci_fetch_array() pour obtenir des éléments vides, si la valeur du champ est NULL.

OCI_RETURN_LOBS (entier)

Utilisé avec oci_fetch_array() pour obtenir la valeur du LOB au lieu du pointeur.

OCI_DTYPE_FILE (entier)

Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur FILE.

OCI_DTYPE_LOB (entier)

Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur LOB.

OCI_DTYPE_ROWID (entier)

Cette option indique à oci_new_descriptor() d'initialiser un nouveau pointeur ROWID.

OCI_D_FILE (entier)

Identique à OCI_DTYPE_FILE.

OCI_D_LOB (entier)

Identique à OCI_DTYPE_LOB.

OCI_D_ROWID (entier)

Identique à OCI_DTYPE_ROWID.

Exemples

Exemple 3. Exemple avec OCI8

<?php
// par sergo@bacup.ru

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

// pour lire les données, aprè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édure stockée sp_newaddress, avec la variable :address_id
// pour les entré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
oci_bind_by_name --  Associe une variable PHP à une variable SQL Oracle
oci_cancel -- Termine la lecture de ressources Oracle
oci_close -- Ferme une connexion Oracle
OCI-Collection->append -- Ajoute un objet à une collection Oracle
OCI-Collection->assign --  Assigne une valeur à une collection depuis une autre collection Oracle
OCI-Collection->assignElem -- Assigne une valeur à un élément d'une collection Oracle
OCI-Collection->getElem -- Retourne la valeur d'un élément d'une collection Oracle
OCI-Collection->free -- Détruit une collection Oracle
OCI-Collection->max -- Retourne le nombre maximal de valeurs d'une collection Oracle
OCI-Collection->size -- Retourne la taille d'une collection Oracle
OCI-Collection->trim -- Supprime les derniers éléments d'une collection Oracle
oci_commit -- Valide les transactions Oracle en cours
oci_connect -- Etablit une connexion avec un serveur Oracle
oci_define_by_name --  Utilise une variable PHP pour la phase de définition, dans une commande SELECT Oracle
oci_error -- Retourne la dernière erreur Oracle
oci_execute -- Exécute une commande SQL Oracle
oci_fetch_all -- Lit toutes les lignes d'un résultat Oracle
oci_fetch_array -- Lit une ligne d'un résultat Oracle sous forme de tableau
oci_fetch_assoc -- Lit une ligne d'un résultat Oracle sous forme de tableau associatif
oci_fetch_object -- Lit une ligne d'un résultat Oracle sous forme d'objet
oci_fetch_row -- Lit une ligne d'un résultat Oracle sous forme de tableau
oci_fetch --  Lit la prochaine ligne dans le résultat Oracle
oci_field_is_null -- Teste si la valeur d'une colonne Oracle est NULL
oci_field_name -- Retourne le nom d'une colonne Oracle
oci_field_precision -- Lit la précision d'une colonne Oracle
oci_field_scale -- Lit l'échelle d'une colonne Oracle
oci_field_size -- Retourne la taille d'un champ Oracle
oci_field_type_raw -- Lit directement le type de colonne Oracle
oci_field_type -- Retourne le type de données d'un champ Oracle
descriptor->free -- Détruit un pointeur de LOB Oracle
oci_free_statement --  Libère toutes les ressources réservées par un résultat Oracle
oci_internal_debug --  Active ou désactive l'affichage des données de débogage Oracle
lob->append -- Ajoute des données à un LOB Oracle
lob->close -- Ferme un LOB Oracle
oci_lob_copy -- Copie un LOB Oracle
lob->eof -- Teste la fin du LOB Oracle
lob->erase -- Ecrase une partie d'un LOB Oracle
lob->export -- Exporte un LOB Oracle dans un fichier
lob->flush -- Ecrit les LOB Oracle sur le disque
lob->import -- Importe un fichier dans LOB Oracle
oci_lob_is_equal -- Compare deux LOB/FILE Oracle
lob->load -- Retourne le contenu d'un LOB Oracle
lob->read -- Lit une partie d'un LOB Oracle
lob->rewind -- Ramène le pointeur interne d'un LOB Oracle au début
lob->save -- Sauve des données dans un LOB Oracle
lob->seek -- Déplace le pointeur interne d'un LOB Oracle
lob->size -- Retourne la taille d'un LOB Oracle
lob->tell -- Retourne la position courante du pointeur de LOB
lob->truncate -- Tronque un LOB Oracle
lob->writeTemporary -- Ecrit un LOB Oracle temporaire
lob->write -- Ecrit des données dans un LOB Oracle
oci_new_collection -- Initialise une nouvelle collection Oracle
oci_new_connect -- Etablit une nouvelle connexion à Oracle
oci_new_cursor -- Alloue un nouveau curseur Oracle
oci_new_descriptor -- Initialise un nouveau pointeur vide de LOB/FILE Oracle
oci_num_fields --  Retourne le nombre de colonnes dans un résultat Oracle
oci_num_rows --  Retourne le nombre de lignes affectées durant la dernière commande Oracle
oci_parse -- Prépare une requête SQL avec Oracle
oci_password_change -- Modifie le mot de passe d'un utilisateur Oracle
oci_pconnect -- Ouvre une connexion persistante à un serveur Oracle
oci_result -- Retourne la valeur d'une colonne dans un résultat Oracle
oci_rollback -- Annule les transactions Oracle en cours
oci_server_version --  Retourne une chaîne contenant les informations de version du serveur Oracle
oci_set_prefetch --  Indique le nombre de lignes qui doivent être lues à l'avance par Oracle
oci_statement_type -- Retourne le type de commande Oracle
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
ocicolumnname -- 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 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
lob->getBuffering -- Retourne l'état de bufferisation LOB d'Oracle
ociinternaldebug --  Active ou désactive l'affichage des données de débogage 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 de LOB/FILE Oracle
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
lob->setBuffering -- Active/désactive la bufferisation des LOB Oracle
ocisetprefetch --  Indique le nombre de lignes qui doivent être lues à l'avance par Oracle
ocistatementtype -- Retourne le type de commande OCI
ociwritelobtofile -- Ecrit un LOB Oracle dans un fichier
ociwritetemporarylob -- Ecrit un BLOB temporaire