[firebase-br] OFF - Firebird x Oracle
Marcos Silva
marcoswos em gmail.com
Qua Fev 13 15:15:50 -03 2008
Reuber,
Já hávia postado uma resposta tua no forum de oracle, mas participo deste
também, só vi agora que a pergunta está aqui. Abaixo tem uma esplicação de
como fazer uma procedure selecionavel e como seleciona-la no oracle. Até
mais, espero ter ajudado.
CREATE OR REPLACE TYPE TickerType AS OBJECT (
ticker VARCHAR2(4),
pricetype VARCHAR2(1),
price NUMBER(10));
/
CREATE OR REPLACE TYPE TickerTypeSet AS TABLE OF TickerType;
/
CREATE OR REPLACE FUNCTION stockpivot()
RETURN TickerTypeSet PIPELINED IS
out_rec TickerType := TickerType(NULL,NULL,NULL);
BEGIN
LOOP
EXIT WHEN condicao;
out_rec.ticker := in_rec.Ticker;
out_rec.pricetype := 'O';
out_rec.price := in_rec.Open_Price;
PIPE ROW(out_rec);
END LOOP;
CLOSE p;
RETURN;
END stockpivot;
/
SELECT * FROM TABLE(stockpivot());
Referência. http://www.psoug.org/reference/pipelined.html
Se você tiver trabalhando com java existe outra forma de fazer isso, e
retornar em um ResultSet sem precisar criar tantos objetos, retornar um
cursor, mas aí teria que buscar nos meus arquivos.
Até,
Marcos Silva
Em 11/02/08, Reuber <jubrovolski em yahoo.com.br> escreveu:
>
> Renato, consegui criar a procedure.
>
> só mais uma pergunta. Como executo essa procedure para que me retorne os
> dados que preciso?
>
> Vou ter que retornar estas informações em um dbgrid do Delphi via
> dbexpress.
>
> Renato Deggau escreveu:
>
> > Reuber,
> >
> > eu tive exatamente a sua situação e a solução que adotei foi a seguinte:
> > - criei uma tabela temporaria no oracle (uma tabela para cada procedure,
> com
> > a estrutura de resultado desejada)
> > - e na criação da procedure fiz assim;
> >
> > PROCEDURE REL_CONSULTASEFETUADAS(pDatainicial in date, pdatafinal in
> date,
> > resultado OUT retorno_procedure)
> > AS
> > cursor ordem1 is
> > select trunc(l.dataconsulta) as dataconsulta, count(l.codqualificador)
> as
> > atendidas
> > from LOGCONSULTAS l
> > where l.dataconsulta between pdatainicial and pdatafinal
> > group by l.dataconsulta;
> > total integer;
> > naoatendidas integer;
> > mcomando varchar2(2000);
> > BEGIN
> > for rec in ordem1
> > loop
> > naoatendidas := 0;
> > total := rec.atendidas + naoatendidas;
> > mcomando := 'insert into temp_consultasefetuadas values
> > ('''||to_char(rec.dataconsulta,'dd/mm/yyyy')||''','||
> >
> > rec.atendidas||','||
> >
> > naoatendidas||','||
> >
> > total||')';
> > execute immediate mcomando;
> > end loop;
> > open resultado for select * from temp_controledecimais;
> > END REL_CONSULTASEFETUADAS;
> >
> >
> > Renato Deggau
> >
> > 2008/2/11 Reuber <jubrovolski em yahoo.com.br>:
> >
> >> bom dia pessoal
> >>
> >> Utilizo o Firebird em minhas aplicações já há algum tempo, porém
> preciso
> >> gerar informações de outro sistema cuja base é oracle. As informações
> >> que vou precisar, somente serão possíveis através de uma store
> procedure.
> >> Ai é que vem o problema. Em firebird em consigo fazer um "FOR SELECT" e
> >> a cada linha processada eu consigo "manipular" as informações da forma
> >> que preciso e no final basta dar um "select * from nomeprocedure" e
> >> "tum". Os dados são gerados.
> >>
> >> Alguém sabe como fazer isso em oracle?
> >>
> >>
> >> Reuber
> >>
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista