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.

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;
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
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 ?