[firebase-br] Select em Procedure

Sérgio Alexandre Gianezini sergio_ag em terra.com.br
Qua Ago 26 19:20:02 -03 2009


"for execute statement", fazendo isso, é praticamente as mesma coisa que por 
um query no programa e mandar rodar, devia é por o select literalmente (o 
que deixa pre-compilado e preparado).
Quanto ao overflow, algum campo do select está maior que a variavel que está 
recebendo... pode forçar o sum usando cast() e ver o que retorna...

"Edison - Precisa Informatica Ltda" 
<edison em precisa.inf.br> escreveu na mensagem 
news:4B2FA96FE34C4D65BEA02AE52A11CD97 em Saulibueno...

Ola pessoal

Estou construindo uma procedure que retorna o codigo do cliente e o valor 
gasto na empresa
- na Tabela de movimento o codigo do cliente e integer, e o valor gasto e 
decimal(15,2)

eu nao consigo retornar na procedure a soma do valor gasto ( utilizando o 
sum )

se eu retornar o valor sem o sum da certo,
e somando a coluna, o fb retorna o seguinte erro Arithmetic overflown

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.

fonte do procedure


CREATE PROCEDURE SOL_SECA001 (
    i_chavereg integer,
    s_empresa varchar(300),
    d_dataini date,
    d_datafin date)
returns (
    id_chavereg integer,
    id_secao smallint,
    id_grupo smallint,
    id_subgrupo smallint,
    id_cliente integer,
    de_razao varchar(40),
    vl_total decimal(15,2))
as
declare variable ssql varchar(700);
BEGIN
   sSql =  '  SELECT TBLCDSITE0.IDCHAVEREG, ' ;
   sSql = sSql || '  TBLCDSITE0.IDSECAO, ';
   sSql = sSql || '  TBLCDSITE0.IDGRUPO, ';
   sSql = sSql || '  TBLCDSITE0.idsubgrupo, ';
   sSql = sSql || '  TBLMVMITE0.idCliente, ';
   sSql = sSql || '  TBLCDSCLI0.RAZAO,  ';
   sSql = sSql || '  TBLMVMITE0.VLRTOTAL  ';
   sSql = sSql || '  FROM TBLMVMITE0 LEFT JOIN TBLCDSITE0 ON 
TBLMVMITE0.IDITEM = TBLCDSITE0.IDITEM            ' ;
   sSql = sSql || '                  LEFT JOIN TBLCDSCLI0 ON 
TBLMVMITE0.IDCLIENTE = TBLCDSCLI0.IDCLIENTE      ' ;
   sSql = sSql || '  WHERE TBLMVMITE0.IDEMPRESA IN ( ' || :s_empresa || ')' 
;
   sSql = sSql || '       AND   TBLMVMITE0.dtvalida BETWEEN ' || '''' || 
:d_DataIni || '''' || ' and '          ;
   sSql = sSql || '''' || :d_DataFin || '''' 
;
   sSql = sSql || '       and TBLMVMITE0.natureza = ' || '''' || 'S' || '''' 
;
   sSql = sSql || '       and TBLCDSITE0.idchavereg = ' || :i_ChaveReg 
;

   sSql = sSql || ' ORDER BY TBLCDSITE0.IDSECAO,         ' 
;
   sSql = sSql || '     TBLCDSITE0.IDGRUPO,              ' 
;
   sSql = sSql || '     TBLCDSITE0.IDSUBGRUPO           ' 
;


   for execute statement
      sSql
      Into :id_ChaveReg, :id_Secao, :id_Grupo, :id_SubGrupo, :id_Cliente, 
:de_Razao, :vl_Total
   do
      suspend;
end^



Atenciosamente


Edison Savaris
Desenvolvedor
edison em precisa.inf.br
______________________________________________
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