execute statement
07/12/2009
0
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> </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> DATAINI DATE,<BR> DATAFIM DATE,<BR> CLI_CODIGO INTEGER)<BR>RETURNS (<BR> CLI_CODIGO INTEGER,<BR> PRO_CODIGO INTEGER,<BR> PRO_QTDE DECIMAL(15,2))<BR>AS</FONT></TD></TR></TBODY></TABLE></DIV>
<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> </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> DATAINI DATE,<BR> DATAFIM DATE,<BR> CLI_CODIGO INTEGER)<BR>RETURNS (<BR> CLI_CODIGO INTEGER,<BR> PRO_CODIGO INTEGER,<BR> PRO_QTDE DECIMAL(15,2))<BR>AS</FONT></TD></TR></TBODY></TABLE></DIV>
Marcos Rocha
Curtir tópico
+ 0
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.
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
18/12/2009
Emerson Nascimento
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
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
Clique aqui para fazer login e interagir na Comunidade :)