[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