Bonjour,
j'ai besoin d'obtenir une liste de valeurs de 2 colonnes via une fonction qui sera exécutée dans un select (donc pas de paramètre out dans la fonction)
J'ai donc pensé déclarer un type de Record dans un package et l'ai utilisé en type de retour de la fonction mais le select suivant me retourne un invalid datatype:
select oma_maint.oma_maintenance(30613,'PARAMETER21') from dual
la fonction oma_maintenance doit me retouner le résultat suivant:
column1 , column2
100 , toto
200 , titi
soit 2 lignes.
voici mon package,
create or replace
PACKAGE OMA_MAINT AS
TYPE value_record IS RECORD( value1_type VARCHAR2(200)
,value2_type VARCHAR2(200)
);
TYPE value_list IS TABLE OF value_record INDEX BY binary_integer;
FUNCTION OMA_MAINTENANCE (p_reqid IN NUMBER,
p_parameter_name IN VARCHAR2)
RETURN value_list;
END OMA_MAINT;
le body simplifié du package
create or replace
PACKAGE BODY OMA_MAINT AS
FUNCTION OMA_MAINTENANCE (
p_reqid IN NUMBER,
p_parameter_name IN VARCHAR2
) RETURN value_list AS
l_list value_list;
l_parameter_number VARCHAR2(20);
l_valeur varchar2(100);
l_request_number number;
l_application VARCHAR2(100);
BEGIN
if length(p_parameter_name)>10 then
l_parameter_number:= substr(p_parameter_name,length(p_parameter_name)-1,2);
else
l_parameter_number:= substr(p_parameter_name,length(p_parameter_name),1);
end if;
case to_number(l_parameter_number)
when 20 then
l_valeur:='BR%';
l_request_number:=1;
when 21 then
l_valeur:='GR%';
l_request_number:=1;
----................................. j'ai supprimé des cases pour réduire la longueur du package
else
l_valeur:='0';
l_request_number:=0;
end case;
case l_request_number
when 1 then
select security_group_id ,security_group_name
bulk collect into l_list
from KNTA_SECURITY_GROUPS
where security_group_name like l_valeur
and enabled_flag = 'Y'
order by 2;
----................................. j'ai supprimé des cases pour réduire la longueur du package
else
l_list(1).value1_type := '0';l_list(1).value2_type := '0';
end case;
RETURN l_list;
END OMA_MAINTENANCE;
END;
Le but est de retourner toujours 2 colonnes mais avec un nombre indéterminé de lignes. Et que cela soit disponible dans un select.
Tout cela sans création d 'une table.
Avez-vous une idée?
MErci,
Partager