从Oracle函数返回多个值
我需要从Oracle函数返回几个varchar变量,但当它返回某个值时,函数立即退出。我有什么办法可以做到这一点吗 这里我返回与条件匹配的第一个值,但我想返回所有值从Oracle函数返回多个值,oracle,function,Oracle,Function,我需要从Oracle函数返回几个varchar变量,但当它返回某个值时,函数立即退出。我有什么办法可以做到这一点吗 这里我返回与条件匹配的第一个值,但我想返回所有值 create or replace function f_pilotosContinentes return varchar as cursor cc(codigoPiloto int) is select count(*) as numero from( select distinct pi.codigo
create or replace function f_pilotosContinentes return varchar as
cursor cc(codigoPiloto int) is
select count(*) as numero from(
select distinct pi.codigo, c.nome from Voo v
join Rota r on r.codigo = v.rota
join Aeroporto a on a.codigo = r.localDestino
join Pais p on p.codigo = a.pais
join Continente c on c.codigo = p.continente
join PilotoVoo pv on pv.voo = v.codigo
join Piloto pi on pi.codigo = pv.piloto
where pi.codigo = codigoPiloto);
pilotos cc%rowtype;
cursor cc1 is
select p.codigo from Piloto p;
codPilotos cc1%rowtype;
duracao int;
temp int;
piloto varchar(20);
begin
duracao := 0;
open cc1;
loop
fetch cc1 into codPilotos;
exit when cc1%notfound;
--Verificar para cada piloto
open cc(codPilotos.codigo);
loop
fetch cc into pilotos;
exit when cc%notfound;
if pilotos.numero between 3 and 4 then
--Buscar a duração total dos voos dele
select sum(v.duracao) into temp from Voo v
join PilotoVoo pv on pv.voo = v.codigo
join Piloto p on p.codigo = pv.piloto
where p.codigo = codPilotos.codigo;
if temp > duracao or duracao = 0 then
duracao := temp;
end if;
end if;
end loop;
close cc;
end loop;
close cc1;
open cc1;
loop
fetch cc1 into codPilotos;
exit when cc1%notfound;
--Verificar para cada piloto
open cc(codPilotos.codigo);
loop
fetch cc into pilotos;
exit when cc%notfound;
if pilotos.numero >= 3 then
--Buscar a duração total dos voos dele
select sum(v.duracao) into temp from Voo v
join PilotoVoo pv on pv.voo = v.codigo
join Piloto p on p.codigo = pv.piloto
where p.codigo = codPilotos.codigo;
if temp = duracao then
select p.nome into piloto from Piloto p
where p.codigo = codPilotos.codigo;
return piloto;
end if;
end if;
end loop;
close cc;
end loop;
close cc1;
dbms_output.put_line('Nenhum piloto viajou para todos os continentes.');
return null;
end;
有多种方法可以从PL/SQL方法返回多个字符串:
旁注:如果函数更改为返回数组,那么如果希望将其更改为流水线函数,则可以将其更改为流水线函数,这意味着如果从SQL查询调用它,它将在函数返回行时立即开始使用行,而不是等待函数完成。这可能有助于提高性能(速度和内存使用)。请发布您目前拥有的代码,这将帮助我们评估您的需求。您在这里尝试做什么还不清楚。RETURN语句被记录为在到达某个函数或过程时退出该函数或过程(这在编程语言中并不少见!)这里没有指示您试图返回什么或返回到哪里。通过返回数组、嵌套表等当然可以返回多个值,但如果我们不知道您想做什么,我看不出您会得到多少帮助…我只能从循环中的单个赋值中猜出来。也许您希望在每次循环执行时返回一个值。看一下?之后,我再次打开光标,查看哪些行与变量“duracao”匹配,然后返回它。问题是不是只有一行会匹配该变量?我说的清楚吗?所以你有一个游标,你可以在其中传递一个值。您正在循环该游标并返回第一个值,但要返回每个值吗?您如何使用这些值?您是否能够发布相关的代码而不是这个,这似乎不是…您可以给我一个如何返回varchar2数组的示例吗?您可以声明一个数组类型,并像任何其他数据类型一样从函数中返回该类型。