Problème d'utilisation accents,db-link et pl/sql (ORA-06502)
Bonjour
Je suis face à une situation assez étrange. J'ai 2 bases Oracle versions 10 et 9 qui communiquent via db-link. Cela fonctionne bien sauf lorsque certaines données transitent via des objets pl/sql (d'où mon post dans cette section) et contiennent des données.
Voici le détail :
schéma "client" gfc_dev_users, interrogent des données du schéma distant grhgrp. Les données avec accents se trouvent dans la table gsociete.
Cette interrogation de base en sql fonctionne et me retourne des valeurs :
Code:
select * from gsociete_test@GRHGRP.xxxx
Maintenant, si je récupère les données via des types table et des fonctions qui retournent des tables, cela fonctionne bien sauf s'il y a des accents dans un champ de la table, j'obtiens alors une erreur ORA-06502.
Voici le code sur le schéma "source" grhgrp dans le package "common" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
TYPE grh_type_societe IS RECORD (
codesoc GSOCIETE.GSO_CODSOC%TYPE,
libelle GSOCIETE.GSO_LIBLO%TYPE,
adr1 GSOCIETE.GSO_ADR1%TYPE,
adr2 GSOCIETE.GSO_ADR2%TYPE,
cp GSOCIETE.GSO_CP%TYPE,
ville GSOCIETE.GSO_VILLE%TYPE
);
TYPE grh_type_liste_societes IS TABLE OF grh_type_societe;
Function F_GET_LISTE_SOCIETES_RH_TEST Return Common.grh_type_liste_societes; |
La fonction en question est assez basique, utilisation d'un curseur sur la table puis remplissage de l'objet en sortie par boucle sur le curseur.
Code:
1 2
| CURSOR c_liste_societes IS SELECT GSO_CODSOC, GSO_LIBLO, GSO_ADR1,GSO_ADR2,GSO_CP,GSO_VILLE FROM GSOCIETE_test
ORDER BY GSO_LIBLO; |
(je peux fournir le détail de ce code s'il le faut, mais ca me semble peu important, vous verrez ci-dessous pourquoi).
Au niveau appel de la fonction dans le schéma client, j'ai ceci :
Code:
1 2 3 4 5 6 7
| Declare
t_liste_societes common.grh_type_liste_societes@GRHGRP.xxx := common.grh_type_liste_societes@GRHGRP.xxx ();
Begin
t_liste_societes := common.f_get_liste_societes_rh_test@GRHGRP.xxx ();
... |
et l'erreur se produit sur cette ligne d'appel.
Cela plante donc uniquement s'il y a des accents dans la table gsociete (par exemple sur le libellé de la société) et fonctionne autrement.
Autre indice très important : si je lance le meme code en local sur la base grhgrp cela fonctionne, meme avec des accents !
Je ne sais pas si le db-link est en cause puisqu'un "select" direct fonctionne, c'est juste en pl/sql et utilisation de fonction et type.
J'ai pris soin de déclarer mes objets avec les instructions %Type afin d'assurer le coup ...
Quelqu'un sait-il d'où cela peut venir ?
Merci