J'ai une nouvelle base de données ici et c'est une version améliorée de Oracle 10g à Oracle 11G - Le problème principal est avec les colonnes LOB et chaque fonction renvoie un LOB. La nouvelle base de données ne renverra pas les cordes comme le L'ancien a fait:
Old DB: P>
SELECT TO_CHAR(FUNC())
3 Réponses :
Si vous utilisez PDO, vous devrez peut-être passer de PDO :: PARAM_LOB sur PDO :: PARAM_STR. Par exemple, en combinaison avec la colonne de liaison:
La moche, c'est que nous avons toujours besoin d'identifier chaque LOB dans chaque relevé (juste pas la déclaration elle-même mais les liaisons) et l'ajuste. Merci de votre réponse, cependant.
Pas vraiment une réponse en tant que tel mais aussi quelques articles que j'espère aide. P>
On dirait qu'il y a une petite différence dans la manière dont les lobes sont retournés entre 10 g et 11g, il y a quelques notes sur la conversion de BYES à byèses lorsque des libreux sont sur une certaine valeur, dans le manuel de référence JDBC. (Je comprends que cela n'effectue pas d'appels OCI car ils utilisent un ensemble de pilotes différent). P>
D'après ce que je peux voir en termes de fonctions OCI8 dans PHP, le fonctionnement par défaut des fonctions de récupération est que les lobes sont renvoyés sous forme de référence et doivent être consultés à l'aide du Maintenant, je ne sais pas si vous utilisez les fonctions OCI pour accéder à votre système Oracle car il n'est pas spécifié dans votre question. P>
Couple d'autres objets qui aideraient à comprendre cela serait si vous pouviez nous faire savoir si vous avez recompansé PHP ou mis à jour les pilotes Oracle avec la version client la plus récente du tout. P>
Je sais que ce n'est pas une solution complète, mais si vous utilisez J'espère que cela aide. P> -> lire () code >
-> Charger () Code> Fonctions etc fonctionne (voir http://au.php.net/ OCI_FETCH_ARRAY - En ce qui concerne le mode et la valeur par défaut). P>
oci_fetch _ * code> pour renvoyer la ligne, ajoutez un deuxième argument à l'appel de
OCI_RETURN_LOBS code>, cela causera la récupérer de retourner une chaîne de champ LOB au lieu d'une référence à un flux ou d'utiliser la variable
$ ["C"] -> Charger () Code> Pour accéder à ce lob, cela le fera charger flux complet et agissez comme une chaîne normale. P>
Il semble que (selon la documentation) que seul oci_fetch_array () code> prend en charge ce paramètre. Le code utilise principalement
oci_fetch_row () code> où il n'est pas pris en charge :(
Si vous pouvez changer le code, vous pouvez remplacer oci_fetch_row () avec OCI_FETCH_ARWARRAY ($ RS, OCI_NUM + OCI_RETURN_NULLS + OCI_RETURN_NULLS + OCI_RETURTURN_LOVELS) et cela vous donnera la même fonctionnalité, bien sûr, cela pourrait-il que cela puisse moi beaucoup de changements en fonction de la quantité d'utilisée, L'autre option serait surcharger la fonction OCI_FETCH_ROW dans un fichier d'inclusion commun à l'aide de la commande Supprimer_function () ( php.net/manual/fr/function.override-function.php )
La surcharge de la fonction est probablement la meilleure réponse à cela maintenant ... Je n'aime pas vraiment cela, car cela se sale de surcharger une fonctionnalité standard, mais c'est probablement le moyen le plus sûr de le faire.
Eh bien, attendons un autre 1-2 jours si quelqu'un propose une meilleure solution pour cela peut-être avec une option de configuration, sinon je pense que vous obtiendrez la bonne réponse et une bonne génération - déjà aidé beaucoup :)
Toujours mieux à pécher sur le côté de la prudence avant de faire quelque chose comme ça :).
Lorsque vous utilisez des lobes, vous devez utiliser OCI :: Lire A > ou OCI :: Chargez pour obtenir leur contenu.
[...] $row = oci_fetch_assoc($result); $lobContents = $row['LOB_COLUMN']->load(); //fetches the whole LOB //or while ($buffer = $row['LOB_COLUMN']->read(4096)) { //sequential read $lobContents .= $buffer; }
Oui, mais cela signifierait d'énormes quantités de changements de code hérité. Ce n'est pas vraiment ce dont j'ai besoin. Voir la question.
Les métadonnées de base de données ont-elles changé du tout? 11g a quelques nouvelles options LOB, telles que SecureFiles. Pouvez-vous comparer
user_lobs code> entre 10 g et 11g?
@JoneRes Qu'est-ce que
user_lobs code>? Je connais avec
user_jobs code> et c'est à peu près tout ce que je peux trouver lorsque je frappe google avec
user_lobs code>. Je ne pense pas que les métadonnées ont changé mais je vais vérifier.
Quelle (s) fonction (s) OCI utilisez-vous spécifiquement? Aussi, voir ceci pour les différences et exemples d'OCI 10G / 11G DOCS. oracle.com/cd/b28359_01/appdev.111/b28395/oci07LOB.htm
Nous avons surtout
oci_fetch_row () code> dans le code ici ...