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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from gsociete_test@GRHGRP.xxxx
Voici le code sur le schéma "source" grhgrp dans le package "common" :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
(je peux fournir le détail de ce code s'il le faut, mais ca me semble peu important, vous verrez ci-dessous pourquoi).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Au niveau appel de la fonction dans le schéma client, j'ai ceci :
et l'erreur se produit sur cette ligne d'appel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 (); ...
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
Partager