J'ai crée une fonction en PL/SQL où j'utilise un curseur.
<code></code>function p1 ( p1_id in number ) return varchar2
is
retour varchar2(80);
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>
Ensuite, j'insère la valeur retournée par cette fonction dans une table.
insert into table_test (
org_id,
champ
)
select
org_id,
pkg.p1(p1_id)
from
ap_supplier_sites_all apsa;
Et là j'ai l'erreur ORA-06502: PL/SQL: numeric or value error: character string buffer too small
En gros, erreur numérique ou erreur sur une valeur: précision de NUMBER trop élevée
Vous savez d'où ça peut venir ? Ce n'est pas une erreur au moment de la compilation du package, c'est au niveau de l'insertion.