Bonjour à tous
J'ai crée dans un 1er temps une fonction en PL/SQL où j'utilise un curseur dans mon package que j'ai nommé pkg.
Ensuite, j'insère la valeur retournée par cette fonction dans une table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 function p1 ( p1_id in number ) return varchar2 is retour varchar2(2000); begin retour := null; BEGIN FOR c1 IN (SELECT apt.name FROM AP_PAYMENT_SCHEDULES_ALL aps, ap_invoices_all ai, ap_suppliers ap, ap_supplier_sites_all apsa, ap_terms apt WHERE apsa.vendor_site_id = p1_id AND aps.invoice_id = ai.invoice_id AND apt.term_id = ai.terms_id AND ap.vendor_id = ai.vendor_id AND apsa.vendor_site_id = ai.vendor_site_id AND apsa.vendor_id = ap.vendor_id AND apt.enabled_flag='Y') LOOP retour := retour || c1.name ; END LOOP; END; return retour; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 insert into table_test ( org_id, champ_test ) select org_id, pkg.p1(p1_id) from ap_supplier_sites_all apsa;
Le souci, c'est qu'au moment où j'insère, j'ai l'erreur suivante ORA-06502: PL/SQL: numeric or value error: character string buffer too small
D'où ça peut venir ?
J'ai pensé dans un premier temps que ça pouvait venir de retour varchar2(2000); dans mon fonction. (au départ c'était 80, j'ai mis 2000 et même essayé 4000) mais toujours le même souci.
Aussi, ma table table_test possède 2 champs : org_id et champ_test.
champ_test possède à la base un type VARCHAR2(80) que j'ai mis pour essayer à VARCHAR2(300) mais toujours le même souci également.
Quelqu'un a déjà rencontré un souci de ce type ?
Partager