[firebase-br] SP Simples no IBExpert

Júlio Vasques julio.vasques em tecipar.com.br
Qua Jan 13 14:51:57 -03 2016


Obrigado Renato,

Nos testes aqui vi que estava faltando o ";" no final de cada clausula do
IF.
Funcionou com END, mas também funciona com ";".

Agora estou tentando criar um cursor na SP, pois quero buscar informações
do Firebird através de meu ERP via EXEC PROCEDURE.

O meu problema é o seguinte, fiz um select via minha alicação conectando o
FIREBIRD, mas existe um campo tipo TIMESTAMP que meu sistema não aceita o
select da erro de tipo de data. Por isso, acho que posso resolver fazendo
uma SP com cursor no Firebird  já convertendo o campo pra DATE. E então é
só rodar a SP da minha aplicação.

Fiz essa SP pra gerar um cursor, mas ao rodar da erro "*multiple rows in
singleton select*." e o resultado é uma linha com os campos com conteúdo
NULL

Qual a sintaxe pra gerar um cursor? Alguém tem um exemplo?

Mais uma vez obrigado.

SET TERM ^ ;

CREATE OR ALTER procedure SPVENDAS
returns (
    PLACA integer,
    VENDA_ID integer,
    VAL_TOTAL_LIQUIDO double precision,
    KM integer,
    MARCA varchar(10),
    DATA date)
as
begin

  SELECT V.DAT_HOR_INICIO_VENDA_CPU,V.VENDA_ID,V.PLACA,VC.MARCA,V.KM
,V.VAL_TOTAL_LIQUIDO
        FROM VENDA V
        INNER JOIN PESSOA P ON V.PESSOA_ID = P.PESSOA_ID
        INNER JOIN VEICULO VC ON V.PLACA = VC.PLACA
        INTO :DATA,:VENDA_ID,:PLACA,:MARCA,:KM,:VAL_TOTAL_LIQUIDO;
  suspend;
end^

SET TERM ; ^



Em 13 de janeiro de 2016 13:05, Renato Alexandre <renatoacf em gmail.com>
escreveu:

> Olá tente assim:
>
> create or alter procedure CALC2VALORES (
>     OPER char(1),
>     VALOR2 integer,
>     VALOR1 integer)
> returns (
>     RESULTADO integer)
> as
> begin
>   /* Procedure Text */
>   IF (:OPER = '+') THEN begin
>     RESULTADO = :VALOR1 + :VALOR2
>   end ELSE IF (:OPER = '-') THEN begin
>     RESULTADO = :valor1 - :valor2
>   end ELSE IF (:OPER = '*') then begin
>     resultado = :valor1 * :valor2
>   end ELSE if (:OPER = '/') then begin
>     RESULTADO = :VALOR1 / :VALOR2
>   end ELSE begin
>     RESULTADO = NULL;
>   end
>   suspend;
> end^
>
> Em qua, 13 de jan de 2016 às 11:40, Júlio Vasques <
> julio.vasques em tecipar.com.br> escreveu:
>
> > Não conheço o FIREBIRD  e preciso fazer uma SP.
> > Peguei um exemplo no youtube de uma SP simples, porém o cara usou o SQL
> > Manager Lite para Interbase e Firebird.
> >
> > Fiz no IBExpert porém da erro de compilação.  O que pode ser?
> >
> >
> > ---------- STATEMENT ----------
> >
> > create or alter procedure CALC2VALORES (
> >     OPER char(1),
> >     VALOR2 integer,
> >     VALOR1 integer)
> > returns (
> >     RESULTADO integer)
> > as
> > begin
> >   /* Procedure Text */
> >   IF (:OPER = '+') THEN
> >     RESULTADO = :VALOR1 + :VALOR2
> >   ELSE IF (:OPER = '-') THEN
> >     RESULTADO = :valor1 - :valor2
> >   ELSE IF (:OPER = '*') then
> >     resultado = :valor1 * :valor2
> >   ELSE if (:OPER = '/') then
> >     RESULTADO = :VALOR1 / :VALOR2
> >   ELSE
> >     RESULTADO = NULL;
> >   suspend;
> > end^
> >
> >
> >
> >
> > ---------- ERROR MESSAGE ----------
> >
> > can't format message 13:896 -- message file C:\WINDOWS\firebird.msg not
> > found.
> > Dynamic SQL Error.
> > SQL error code = -104.
> > Token unknown - line 12, column 3.
> > ELSE.
> > ______________________________________________
> > 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://www.firebase.com.br/pesquisa_lista.html
> >
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista