Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
J'ai déclaré une procedure stockée dans mon objet de tansaction en locale external function.
Je passe un paramètre par référence celui-ci m'est retourné en etant tronqué.
Je travaille en pb10.5 et oracle 8i
Est-ce que quelqu'un a une idée ?
Dernière modification par ossarc (11-09-2007 13:19:03)
Hors ligne
Bonjour,
Pourrais-tu nous envoyer la déclaration sous PB et la déclaration sous PL/SQL de la procédure en question?
Merci d'avance
Hors ligne
sous pb:
subroutine GIDE_POPX_CRE_OPERATION(string DSC_PARAM_I,string DATE_BANDEAU_I,string COD_COLL_I,string COD_BUDG_I,ref string IDOPERAT_O,double COD_SECT_INV_I,double COD_SECT_FON_I,string LIC_OPERAT_I,string LIB_OPERAT1_I,string LIB_OPERAT2_I,double IND_AP_I,double IND_HAP_I,string NUM_PROG_AP,double DEPREVTTC_I,string REF_EXTERNE_I,double MNT_PREV_AP_DEP_I,string NUM_SERV_G_I) RPCFUNC ALIAS FOR "~"GIDE~".~"GIDE_POPX_CRE_OPERATION~""
sous oracle:
create or replace procedure gide_popx_cre_operation ( Dsc_Param_i In Varchar2, Date_Bandeau_i In Varchar2, Cod_Coll_i In Varchar2, Cod_Budg_i In Varchar2, IdOperat_o Out Varchar2, Cod_Sect_Inv_i In Number, Cod_Sect_Fon_i In Number, Lic_Operat_i In Varchar2, Lib_Operat1_i In Varchar2, Lib_Operat2_i In Varchar2, Ind_AP_i In Number, Ind_HAP_i In Number, Num_Prog_AP In Varchar2, DePrevTTC_i In Number, Ref_Externe_i In Varchar2, Mnt_Prev_AP_Dep_i In Number, Num_Serv_G_i In Varchar2 ) Is Num_Prog_AP_io varchar2(10); delegat_cp_io varchar2(1); num_prg_d_io varchar2(10); idoperat_io varchar2(8); begin num_prog_ap_io := Num_Prog_ap; delegat_cp_io := 'H'; op.popx_cre_operation( Dsc_Param_i , Date_Bandeau_i, Cod_Coll_i, Cod_Budg_i, IdOperat_io, 'D', null, 2, Cod_Sect_Inv_i, Cod_Sect_Fon_i, Lic_Operat_i, Lib_Operat1_i, Lib_Operat2_i, Ind_AP_i, Ind_HAP_i, Num_Prog_AP_io, 0, 0, 1, 1, null, null, null, null, null, null, null, null, null, null, Ref_Externe_i, null, null, null, 1, '1', null, null, 0, 0, 0, 0, Num_Serv_G_i, 'N' , 1, 0, delegat_cp_io, null, num_prg_d_io) ; IdOperat_o := IdOperat_io; end;
Hors ligne
Ok, merci pour les infos.
Tu passes par ODBC ou en natif?
Hors ligne
en natif, c'est sqlnet
Hors ligne
Juste une question: c'est tronqué à combien? parceque ta variable idoperat_io est un varchar2(8)
Hors ligne
Il ne me renvoie que 7 caractères
Hors ligne
Bon, je suppose que quand tu testes idoperat_io au niveau de la sortie de procédure PL, tu as bien 8 caractères.
Tu as essayé en appelant ta procédure directement dans PB, sans passer par une external (DECLARE, EXECUTE, et FETCH sur le paramètre en Output)?
Hors ligne
Le pb c'est que cette procedure marche bien en oracle 7 et 9 et ne plante que pour la version 8. A priori c'est le passage d'oracle à pb qui ne se fait pas correctement.
Hors ligne
Bonjour,
Tu as essayé en utilisant la connexion native Oracle 7?
Nous utilisions le driver natif Oracle 7.5 pour nous interfacer avec la 8, et ça marchait bien...
Hors ligne
Salut,
Avant l'appel de ta proc tu dois "sizer" ta string dans PB en faisant un space(n) où n est la taille maxi de ta chaine dans Oracle.
Exemple si tu veux gérer une chaine allant jusqu'à 100 carac dans oracle alors fait un ma_chaine = space(100) avant l'appel de la proc....
Cela vient du fait qu'a priori Oracle dimensionne les varchar2 passés par référence lors de leur première affectation.
Ce cas se présente souvent quand le développeur utilise la même variable chaîne pour gérer le message d'erreur par référence de plusieurs procédures appelées les unes après les autres. Lorsque la première proc plante la taille du message dans la seconde sera tronqué à la taille du message de la première proc.
Hors ligne
la chaine que je passe est initialiser à space (8) et en pb10.5, on peut pas s'interfacer avec la 7
Hors ligne
ossarc a écrit:
la chaine que je passe est initialiser à space (8) et en pb10.5, on peut pas s'interfacer avec la 7
Et ta chaîne est tronquée avant le huitième caractère ?
Hors ligne
La première fois il est troqué à 7 caractères et si on apelle cette proc +sieurs fois successivement,il supprime un caractère à chaque fois
Hors ligne
pour recuperer les variables en pl/sql
Variable A_1 number; execute P_XXX('A', '04-SEP-06',XXX , :A_1 ); Print A_1 ;
Hors ligne
Bon, à tout hasard, tu as bien le paramétrage suivant au niveau de ta config BDD?
DbParm --> ...,DisableUnicode=1
Hors ligne
ou est-ce que l'on parametre le unicode ?
Hors ligne
C'est au niveau du paramétrage de l'objet transactionnel SQLCA:
SQLCA.DBParm = "DisableUnicode=1"
Par défaut, PB 10.2 et 10.5 le mettent à 0, et ça pose des problèmes de passage de données avec Oracle...
Hors ligne
Super Info, ça marche, il fallait rajouter 'DisableUnicode=1' dans le dbparm
Hors ligne