Retornando um cursor
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Pessoal, preciso de um help....eu recebo os parametros e uma procedure, faço um cursor e quero retornar o cursor para a aplicação...como eu faço?...podem me ajudar?
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Precisa retornar o cursor montado ou, o retorno mesmo dele?
Não poderia retornar um ref_cursor?
Precisa retornar o cursor montado ou, o retorno mesmo dele?
Não poderia retornar um ref_cursor?
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
quero retornar o conteudo do cursor, somente os dados.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Seguinte, se te retornar um Type (Pl/Sql table) não resolve?
Se for isso, aqui no fórum tem um monte de exemplos, caso contrário, dá pra lhe retornar um ref cursor, que é o que a gente faz aqui pra galera do .NET ler.
Alguma das soluções lhe ajuda?
Seguinte, se te retornar um Type (Pl/Sql table) não resolve?
Se for isso, aqui no fórum tem um monte de exemplos, caso contrário, dá pra lhe retornar um ref cursor, que é o que a gente faz aqui pra galera do .NET ler.
Alguma das soluções lhe ajuda?
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Trevisoli, primeiro muito obrigado pela atenção. o bloco da procedure é exatamente como está a baixo.
é uma procedure de consulta, um sistema feito em DOT NET chama esta procedure passando os parametros que, para funcionar, deverá ser retornado o cursor com os dados, ficou mais claro agora? só que não sei como retornar esses dados para o DOT NET, sei que tenho que retornar o cursor para funcionar, mas não sei como fazer isso.
obs: outra coisa, se não for abuso, como eu faço para a procedure ao invés receber os parametros como parametros, receber por meio de XML?
Valeu cara
é uma procedure de consulta, um sistema feito em DOT NET chama esta procedure passando os parametros que, para funcionar, deverá ser retornado o cursor com os dados, ficou mais claro agora? só que não sei como retornar esses dados para o DOT NET, sei que tenho que retornar o cursor para funcionar, mas não sei como fazer isso.
procedure p1 (p_1 in number, p_2 in number) is
cursor c_1 is
select *
from tb_1, tb_2
where tb_1.coluna1 = tb_2.coluna1
and tb_1.coluna2 = p_1
and tb_1.coluna3 = p_2;
reg_c_1 c_1%rowtype;
begin
open c_1;
loop
fetch c_1 in reg_c_1;
exit when c_1%type;
-- retornar o cursor aqui!!!!
end loop;
close c_1;
end;
obs: outra coisa, se não for abuso, como eu faço para a procedure ao invés receber os parametros como parametros, receber por meio de XML?
Valeu cara
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Então brow,
Sobre o .NET, faz um retorno de ref cursor mesmo (dá uma melhorada neste exemplo):
Sobre o XMLTYPE eu nunca trabalhei desta forma, mas, faz um teste ai com esse trechinho que monntei aqui e veja se consegue:
Qualquer coisa, manda pra gente.
Sobre o .NET, faz um retorno de ref cursor mesmo (dá uma melhorada neste exemplo):
-- 1) Criar type na spec
TYPE tcursor IS REF CURSOR;
-- 2) Procedure na body da PCK
PROCEDURE pvalidacursor (p1 IN NUMBER,
p2 IN NUMBER,
pretorno OUT tcursor
)
IS
BEGIN
OPEN pretorno FOR
SELECT TB_1,CAMPOA,
TB_2.CAMPOB
FROM TB_1, TB_2
WHERE TB_1.COLUNA1 = TB_2.COLUNA1
AND TB_1.COLUNA2 = P_1
AND TB_1.COLUNA3 = P_2;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Erro aqui: ');
END;
DECLARE
PROCEDURE PTESTES(pcod sys.xmltype)
IS
BEGIN
dbms_output.put_line('teste ');
END;
BEGIN
dbms_output.put_line('teste2 ');
END;
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
olha como ficou meu código:...mas tem certeza de que assim retorna para aplicação?
PROCEDURE PBEA_CONSULTA_LANCTO_CONTAB_PR(p_cod_mpresa in LANCTO_CONTABIL.lcon_dpef_cod_empresa%type,
p_cod_filial in LANCTO_CONTABIL.lcon_dpef_cod_filial%type,
p_origem in LANCTO_CONTABIL.lcon_origem%type,
p_periodo in LANCTO_CONTABIL.lcon_dat_movto%type,
p_ciclo in varchar2,
p_cod_serv in ITEM_CONTABIL.icon_cod_servico%type,
p_seg_neg in ITEM_CONTABIL.icon_seg_negocio%type,
p_cont_contab in ITEM_CONTABIL.icon_cod_cont_contabil%type,
p_cent_custo in ITEM_CONTABIL.icon_cod_cen_custo%type,
p_retorno OUT c_cursor) IS
TYPE c_cursor IS REF CURSOR;
BEGIN
open p_retorno for
select *
from LANCTO_CONTABIL lc,
ITEM_CONTABIL ic
where lc.lcon_ide_bea = ic.icon_lcon_ide_bea
and lc.lcon_origem = p_origem
and lc.lcon_dat_movto = p_periodo
and lc.lcon_dpef_cod_empresa = p_cod_mpresa
and lc.lcon_dpef_cod_filial = p_cod_filial
or (ic.icon_seg_negocio = p_seg_neg or
ic.icon_cod_cen_custo = p_cent_custo or
ic.icon_cod_cont_contabil = p_cont_contab or
ic.icon_cod_servico = p_cod_serv);
-- campo do parametro p_ciclo)
END;
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
minha procedure nem compila, dá erro no paremtro p_retorno OUT c_cursor. dizendo q c_cursor deve ser declarado.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
É porque esse parametro de OUT deve ser declarado antes da utilização, ou seja, na SPEC de uma package por exemplo.
Outra coisa, retornar vai sim, à não ser que tua query não retorne nada.
Só uma Dica, eu não retornaria um "Select *", mas, sim, nomearia cada coluna do retorno, pois não sei se pode ter algum tipo de problema no .NET.
Qualquer coisa, manda pra gente.
É porque esse parametro de OUT deve ser declarado antes da utilização, ou seja, na SPEC de uma package por exemplo.
Outra coisa, retornar vai sim, à não ser que tua query não retorne nada.
Só uma Dica, eu não retornaria um "Select *", mas, sim, nomearia cada coluna do retorno, pois não sei se pode ter algum tipo de problema no .NET.
Qualquer coisa, manda pra gente.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
mas não estou utilizando uma package. fiz a declaracao do cursor a cima assim: TYPE c_cursor IS REF CURSOR;
mas não adiantou.
mas não adiantou.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother, seguinte, pra se usar o TYPE, ele deve ser de Banco, ou, declarado global, dentro de uma Package, por exemplo.
Mas, se quiseres fazer num bloco anônimo, dá uma olhada neste código abaixo.
Qualquer dúvida, manda pra gente.
Mas, se quiseres fazer num bloco anônimo, dá uma olhada neste código abaixo.
DECLARE
-- Declaro type antes de utilizar na procedure
TYPE tcursor IS REF CURSOR;
vret tcursor;
PROCEDURE pteste (pid IN NUMBER DEFAULT 1,
pretorno OUT tcursor)
IS
vretint tcursor;
BEGIN
-- abro o select para retorno
dbms_output.put_line('Antes do Retorno.');
OPEN vretint FOR SELECT 1 FROM dual;
dbms_output.put_line('Depois do Retorno ');
END;
BEGIN
-- Utilizo o retorno na aplicação
pteste(1,vret);
END;
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
ok...só funciona assim passando para a procedure?....é que é uma procedure muito pequena, exatamente do tamanho desse bloco q você colocou(mas irá retornar um milhão de registros) e por isso eu não queria fazer uma package, mas vou fazer uma procedure chamando uma outra passando esses parametros.
valeu!
valeu!
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
Cara, não está funcionando não. veja bem, minha rotina é exatamente essa a baixo e tenho q retornar o cursor para a aplicação dot .net, mas não está funcionando está dando erro nesta linha "p_retorno OUT c_cursor"....como eu faço?...te confesso q eu nunca fiz uma procedure retornando o cursor.
PROCEDURE PBEA_CONSULTA_LANCTO_CONTAB_PR(p_cod_mpresa in TBEA_LANCTO_CONTABIL.lcon_dpef_cod_empresa%type,
p_cod_filial in TBEA_LANCTO_CONTABIL.lcon_dpef_cod_filial%type,
p_origem in TBEA_LANCTO_CONTABIL.lcon_origem%type,
p_periodo in TBEA_LANCTO_CONTABIL.LCON_ANOMES_MOVTO%type,
p_tip_doc in varchar2,
p_divisao in varchar2,
p_local_neg in TBEA_ITEM_CONTABIL.icon_seg_negocio%type,
p_ciclo in varchar2,
p_cod_serv in TBEA_ITEM_CONTABIL.icon_cod_servico%type,
p_cont_contab in TBEA_ITEM_CONTABIL.icon_cod_cont_contabil%type,
p_num_doc_contab in varchar2,
p_cent_custo in TBEA_ITEM_CONTABIL.icon_cod_cen_custo%type,
p_cent_lucro in TBEA_ITEM_CONTABIL.icon_cod_cen_lucro%TYPE,
p_evento in TBEA_ITEM_CONTABIL.icon_cod_evento%type,
p_cod_munic in varchar2,
p_cnpj in TBEA_ITEM_CONTABIL.icon_num_cnpj%type,
p_cpf in TBEA_ITEM_CONTABIL.icon_num_cpf%type,
p_num_nf in number,
p_retorno OUT c_cursor) IS
TYPE c_cursor IS REF CURSOR;
BEGIN
open p_retorno for
select lc.LCON_IDE_BEA, lc.LCON_ANOMES_MOVTO, lc.LCON_ORIGEM, lc.LCON_DPEF_COD_EMPRESA,
lc.LCON_DPEF_COD_FILIAL, lc.LCON_DAT_DOCTO, lc.LCON_TIP_DOCTO, lc.LCON_DAT_LANCTO,
lc.LCON_TEX_CAB, lc.LCON_IND_TIP_LANCTO, lc.LCON_IND_ANA_SINT, lc.LCON_IND_AGRUPAMENTO,
lc.LCON_REF_LANC, ic.ICON_COD_CONT_CONTABIL, ic.ICON_COD_LOC_NEGOCIO, ic.ICON_COD_DIVISAO,
ic.ICON_COD_SERVICO, ic.ICON_SEG_NEGOCIO, ic.ICON_NUM_CICLO_FATUR, ic.ICON_CHA_LANCTO, ic.ICON_COD_AGENTE,
ic.ICON_COD_CEN_CUSTO, ic.ICON_COD_CEN_LUCRO, ic.ICON_UNI_MEDIDA, ic.ICON_QTD_FATURADA, ic.ICON_DAT_REF_TRAFEGO,
ic.ICON_VAL_LAN_CONTABIL, ic.ICON_DES_ATRIBUICAO, ic.ICON_DES_HISTORICO, ic.ICON_COD_EVENTO, ic.ICON_NUM_CNPJ,
ic.ICON_NUM_CPF, ICON_DAT_VENCTO, ic.ICON_COD_HIS_padrão, ic.ICON_NUM_IBGE, ic.ICON_COD_PARTICIPANTE,
ic.ICON_LCON_IDE_BEA, ic.ICON_ITEM_CONTABIL
from TBEA_LANCTO_CONTABIL lc,
TBEA_ITEM_CONTABIL ic
where lc.lcon_ide_bea = ic.icon_lcon_ide_bea
and lc.lcon_origem = p_origem
and lc.LCON_ANOMES_MOVTO = p_periodo
and lc.lcon_dpef_cod_empresa = p_cod_mpresa
and lc.lcon_dpef_cod_filial = p_cod_filial
or (ic.icon_seg_negocio = p_seg_neg or
ic.icon_cod_cen_custo = p_cent_custo or
ic.icon_cod_cont_contabil = p_cont_contab or
ic.icon_cod_servico = p_cod_serv or
ic.icon_seg_negocio = p_local_neg or
ic.icon_cod_servico = p_cod_serv or
ic.icon_cod_cont_contabil = p_cont_contab or
ic.icon_cod_cen_custo = p_cent_custo or
ic.icon_cod_cen_lucro = p_cent_lucro or
ic.icon_cod_evento = p_evento or
ic.icon_num_cnpj = p_cnpj or
ic.icon_num_cpf = p_cpf);
END; -- Procedure
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
O erro é exatamente o que lhe informei anteriormente:
Você está tentando passar por parâmetro um objeto que ainda não foi criado (c_cursor) e, está criando este objeto dentro da procedure.
Daí dá erro.
Faz um teste velho, cria este objeto na spec de uma package que não tem como dar erro.
O erro é exatamente o que lhe informei anteriormente:
Você está tentando passar por parâmetro um objeto que ainda não foi criado (c_cursor) e, está criando este objeto dentro da procedure.
Daí dá erro.
Faz um teste velho, cria este objeto na spec de uma package que não tem como dar erro.
-
- Rank: DBA Júnior
- Mensagens: 223
- Registrado em: Qui, 14 Dez 2006 10:45 am
- Localização: Brasília-DF
Cleber Zumba de Souza
me responde uma coisa....essa consulta, essa package irá retornar mais de um milhão de registro, eu fazendo dessa forma irá diminuir a performance?
e problema é meu chefe não aceitar uma package, esse é o problema...só tem esse jeito mesmo??
e problema é meu chefe não aceitar uma package, esse é o problema...só tem esse jeito mesmo??
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante