create or replace procedure TesteSelect(
cod_regional IN number DEFAULT 0,
p_cod_regional OUT NUMBER,
p_dsc_regional OUT varchar2,
p_dsc_erro OUT varchar2) IS
begin
p_dsc_erro := null;
if(cod_regional = 0) then
begin
select reg_cod, reg_des into p_cod_regional, p_dsc_regional
from fas_corporativo.corp_regional;
end;
else
begin
select reg_cod, reg_des into p_cod_regional, p_dsc_regional
from fas_corporativo.corp_regional
where reg_cod = cod_regional;
end;
end if;
exception
when others then
p_dsc_erro:= sqlerrm;
end;
porem quando eu mando executar essa proc me retorna o seguinte erro:
Tem como fazer o retorno de um objeto.
Você pode retornar um Type pl/sql table.
Dê uma pesquisada aqui no fórum mesmo por Type ou PL/SQL Table que irá encontrar exemplos interessantes.
create or replace PROCEDURE TESTESELECT3 AS
CURSOR c_carac IS select nu_caracteristica, de_caracteristica from caracteristica;
TYPE type_numero IS TABLE OF caracteristica.nu_caracteristica%TYPE INDEX BY BINARY_INTEGER;
tab_numero type_numero;
TYPE type_desc IS TABLE OF caracteristica.de_caracteristica%TYPE INDEX BY BINARY_INTEGER;
tab_desc type_desc;
v_counter NUMBER := 0;
BEGIN
FOR r_cname IN c_carac
LOOP
v_counter := v_counter + 1;
tab_numero(v_counter):= r_cname.nu_caracteristica;
tab_desc(v_counter):= r_cname.de_caracteristica;
END LOOP;
FOR i_cname IN 1 .. v_counter
LOOP
DBMS_OUTPUT.put_line('Codigo: '|| tab_numero(i_cname));
DBMS_OUTPUT.put_line('Descri: '|| tab_desc(i_cname));
END LOOP;
END TESTESELECT3;
Codigo: 1
Descri: Tipo de Logradouro
Codigo: 2
Descri: Tipo de localidade
Codigo: 3
Descri: Domicilio coberto por
Codigo: 4
Descri: Situação do Domicílio
Codigo: 5
Descri: Tipo do Domicílio
Codigo: 6
Descri: Número de Cômodos
Codigo: 7
Descri: Tipo de Construção
Codigo: 8
Descri: Tipo de abastecimento de água
Codigo: 9
Descri: Tratamento de água
Codigo: 10
Descri: Tipo de Iluminação
Codigo: 11
Descri: Escoamento Sanitário
Codigo: 12
Descri: Destino do Lixo no Domicílio
Codigo: 13
Descri: Sexo
Codigo: 14
Descri: Nacionalidade
Codigo: 15
Descri: País de Origem
Codigo: 16
Descri: Estado civil
Codigo: 17
Descri: Tipo de deficiência
agora como posso retornar os dados para um resultset, para que no .NET possa consumir essa procedure???
create or replace PROCEDURE TESTESELECT3 AS
CURSOR c_carac IS select nu_caracteristica, de_caracteristica from caracteristica;
TYPE type_numero IS TABLE OF caracteristica.nu_caracteristica%TYPE INDEX BY BINARY_INTEGER;
tab_numero type_numero;
TYPE type_desc IS TABLE OF caracteristica.de_caracteristica%TYPE INDEX BY BINARY_INTEGER;
tab_desc type_desc;
v_counter NUMBER := 0;
BEGIN
FOR r_cname IN c_carac
LOOP
v_counter := v_counter + 1;
tab_numero(v_counter):= r_cname.nu_caracteristica;
tab_desc(v_counter):= r_cname.de_caracteristica;
END LOOP;
FOR i_cname IN 1 .. v_counter
LOOP
DBMS_OUTPUT.put_line('Codigo: '|| tab_numero(i_cname));
DBMS_OUTPUT.put_line('Descri: '|| tab_desc(i_cname));
END LOOP;
END TESTESELECT3;
create or replace FUNCTION TESTESELECT3 return caracteristica%rowtype
IS
CURSOR c_carac IS select nu_caracteristica, de_caracteristica from caracteristica;
v_caract caracteristica%rowtype;
BEGIN
open c_carac;
fetch c_carac into v_caract;
close c_carac;
return v_caract;
END TESTESELECT3;