execute statement

07/12/2009

14

Bom dia.
<DIV>Possuo uma stored procedure qual eu preciso de retornar alguns campos de uma tabela. Esta procedure me traz um cálculo que não pode ser feito via Delphi. Porém no select eu precisaria de cláusulas Where para fazer uma filtragem dos dados, entretanto ao executar a procedure o Firebird me retorna o erro:</DIV>
<DIV><FONT color=#ff0000 face="Courier New, Courier, mono">Unsuccessful execution caused by an unavailable resource.<BR>Invalid argument in EXECUTE STATEMENT - cannot convert to string.<BR>At procedure 'SP_TEMPOMEDIO' line: 20, col: 3.</FONT></DIV>
<DIV><FONT color=#000000></FONT>&nbsp;</DIV>
<DIV>Segue o código da stored procedure:</DIV>
<DIV>
<TABLE border=0 cellSpacing=1 cellPadding=1 width="100%" align=center>
<TBODY>
<TR>
<TD bgColor="#CCCCCC"><FONT style="BACKGROUND-COLOR: #cccccc">CREATE OR ALTER PROCEDURE SP_PRODUTOQTDE (<BR>&nbsp;&nbsp;&nbsp; DATAINI DATE,<BR>&nbsp;&nbsp;&nbsp; DATAFIM DATE,<BR>&nbsp;&nbsp;&nbsp; CLI_CODIGO INTEGER)<BR>RETURNS (<BR>&nbsp;&nbsp;&nbsp; CLI_CODIGO INTEGER,<BR>&nbsp;&nbsp;&nbsp; PRO_CODIGO INTEGER,<BR>&nbsp;&nbsp;&nbsp; PRO_QTDE&nbsp;&nbsp; DECIMAL(15,2))<BR>AS</FONT></TD></TR></TBODY></TABLE></DIV>
Responder

Posts

08/12/2009

Marcos Rocha

Bom dia.Possuo uma stored procedure qual eu preciso de retornar alguns campos de uma tabela. Esta procedure me traz um cálculo que não pode ser feito via Delphi. Porém no select eu precisaria de cláusulas Where para fazer uma filtragem dos dados, entretanto ao executar a procedure o Firebird me retorna o erro:Unsuccessful execution caused by an unavailable resource.
Invalid argument in EXECUTE STATEMENT - cannot convert to string.
At procedure 'SP_TEMPOMEDIO' line: 20, col: 3.
Segue o código da stored procedure:CREATE OR ALTER PROCEDURE SP_PRODUTOQTDE (
  DATAINI DATE,
  DATAFIM DATE,
  CLI_CODIGO INTEGER)
RETURNS (
  CLI_CODIGO INTEGER,
  PRO_CODIGO INTEGER,
  PRO_CUSTO DECIMAL(15,2))
AS
  FOR EXECUTE STATEMENT 'SELECT CLI_CODIGO, PRO_CODIGO FROM VENDAPRODUTO WHERE VEN_CODIGO IS NOT NULL'||CASE WHEN DATAINI IS NOT NULL THEN ' AND VEN_DATA >= '||COALESCE(:DATAINI AS VARCHAR(10))||CASE WHEN DATAFIM IS NOT NULL THEN ' AND VEN_DATA <= '||COALESCE(:DATAFIM AS VARCHAR(10))||CASE WHEN CLI_CODIGO IS NOT NULL THEN ' AND CLI_CODIGO = '||COALESCE(:CLI_CODIGO AS VARCHAR(6)) DO
  BEGIN
    -- select para trazer custo de compras
    -- select para deduzir as vendas
    PRO_CUSTO = COMPRAS - VENDAS;
  END
END
   PS.: Desculpem a gafe de ter postado a pergunta sem editar por completo. 
Responder
tente assim:

CREATE OR ALTER PROCEDURE SP_PRODUTOQTDE (
  DATAINI DATE,
  DATAFIM DATE,
  CLI_CODIGO INTEGER)
RETURNS (
  CLI_CODIGO INTEGER,
  PRO_CODIGO INTEGER,
  PRO_CUSTO DECIMAL(15,2))
AS
DECLARE VARIABLE CQUERY VARCHAR(500)
BEGIN
  CQUERY = 'SELECT CLI_CODIGO, PRO_CODIGO FROM VENDAPRODUTO WHERE VEN_CODIGO IS NOT NULL';

  IF (NOT DATAINI IS NULL) THEN
    CQUERY = CQUERY || ' AND VEN_DATA >= ''' || CAST(:DATAINI AS VARCHAR(10)) || '''';

  IF (NOT DATAFIM IS NULL) THEN
    CQUERY = CQUERY || ' AND VEN_DATA <= ''' || CAST(:DATAFIM AS VARCHAR(10)) || '''';

  IF (NOT CLI_CODIGO IS NULL) THEN
    CQUERY = CQUERY || ' AND CLI_CODIGO = ' || CAST(:CLI_CODIGO AS VARCHAR(6));

  FOR EXECUTE STATEMENT CQUERY
  INTO ...
  DO
  BEGIN
    -- select para trazer custo de compras
    -- select para deduzir as vendas
    PRO_CUSTO = COMPRAS - VENDAS;
  END

END
Responder

18/12/2009

Marcos Rocha

Obrigado Emerson, funcionou divinamente.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira