Page 1 sur 1

Insertion de donnée dans un Champ CLOB Oracle 9i

Posté : 05 févr. 2007, 20:43
par nocay
Bonjour,
je souhaites insérer du texte dans un CLOB oracle.
Je suis sur Windows avec un serveur oracle 9i et un client 9i.
J'ai un serveur apache 2.0 et un php 5.2.0

Avec cette config je n'ai pas réussit a utiliser php_oci8. Celle-ci fonctionne si j'installe un client 10 (test fait avec un instant client basic 10g) mais seulement si le chemin du client 10 se trouve avant le chemin du client 9i. Malheureusement cela perturbe certains outils d'administrations de la version 9 (imp et exp).
J'ai donc essayé d'utiliser pdo mais je suis tombé sur deux problèmes.
L'insertion dans un clob en pdo se fait via un stream mais les données que je dois insérer ne sont pas dans un fichier mais dans une variable chaine php.
L'insertion via un fichier texte n'a pas fonctionné non plus. J’obtiens une erreur (OCIStmtExecute: ORA-00932:
inconsistent datatypes: expected BLOB got CLOB
(/tmp/pear/cache/PDO_OCI-1.0.1/oci_statement.c:142)) Le bug est déjà recensé ici (http://pecl.php.net/bugs/bug.php?id=9928).

J'aimerai éviter d'utiliser ODBC (ne sachant même pas si ca fonctionnera).

Quelqu'un aurait il une solution à mon problème ?
Une interface d'accès aux données à me conseiller ?
Une configuration php qui me permettrait d'arriver à faire cette insertion ?
Une feinte pour que je puisse utiliser l'instant client 10 sans modifier la configuration oracle (serveur9+client 9) existante ?

Ca fait une journée que je cherche sur le net et que je teste des solutions mais la je pense que je ne suis pas doué :?

A votre bon cœur messieurs et mesdames.
Et merci d’avance

Posté : 06 févr. 2007, 00:17
par titerm
j'ai eu les meme problèmes que toi pour les clients oracle.
Effectivement, il y a une fonction dans oci.dll qui n'apparait que dans l'instant client 10. Moi, je dois conserver les clients 8,9, et now 10.

Voila la solution que j'ai trouvé. J'avais les meme problème que toi lors que je mettais le client 10 en premier. Car c'est un client minimaliste qui ne contient au final que très peu de chose. J'ai donc mergé le client 10 dans le client 9. De mémoire comme ca, je crois me souvenir qu'il n'y avait qu'un seul fichier commun, l'oci.dll. Il faut bien sur conserver celui du client 10. Il est compatible avec le client 9.
Tu ne dois pas avoir de ld_libray_path défini, tout doit passer par la registry (c'est normalement le mode natif des clients oracles depuis les 7 ou 8).

Posté : 06 févr. 2007, 13:26
par nocay
Merci beaucoup pour l'info.

Je viens d'essayer et cela fonctionne en partie;

Le php_oci8 à l'air de fonctionner correctement.

Par contre j'ai un exe qui utilise les dll oci d'oracle, et celles de l'instant client basic 10 n'ont pas été suffisantes pour que tout fonctionne correctement.
J'ai du rajouter quelques dll à partir d’un installe complète du client 10 pour cet exe (dans mon cas oracore10.dll puis oranls10.dll puis oraunls10.dll et enfin orauts.dll).
Je n'ai que cet exe qui utilise directement les dll oci, mais je ne sais pas si un autre programme, utilisant les dll oci oracle, n’aura pas besoin de dll supplémentaires. Il y donc un risque avec l’instant client.

Je vais quand même marquer ce thread comme résolu et poser la question sur le pdo dans un autre.

Encore merci de votre aide.

Nocay

P.S. deux fichiers sont communs et à écraser oci.dll et ociw32.dll