2

http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip

手册说 FIRST 接受“任何计算为整数的表达式”。这不应该也意味着一个变量吗?

在以下存储过程中,我尝试提供:DAYSFIRST.

Token unknown - line 10, column 18
:

第 10 行第 18 列是:DAYS 前面...

SET TERM ^ ;

CREATE PROCEDURE P_STOCK_MDA 
 ( STOCK BIGINT, TRADE_DATE DATE, DAYS SMALLINT ) 
RETURNS 
 ( AVG_CLOSE NUMERIC(6,2) )
AS 
BEGIN
  SELECT AVG(STOCK_ADJ_CLOSE) FROM (
    SELECT FIRST :DAYS STOCK_ADJ_CLOSE
    FROM STOCK_DAILY yd 
    WHERE yd.STOCK_STOCK=:STOCK AND yd.TRADE_DATE<=:TRADE_DATE
    ORDER BY yd.TRADE_DATE DESC
  ) INTO AVG_CLOSE;
END^
4

1 回答 1

4

您需要将参数括在括号中以使其正常工作:

SELECT FIRST (:DAYS) STOCK_ADJ_CLOSE

完整代码:

SET TERM ^ ;

CREATE PROCEDURE P_STOCK_MDA 
 ( STOCK BIGINT, TRADE_DATE DATE, DAYS SMALLINT ) 
RETURNS 
 ( AVG_CLOSE NUMERIC(6,2) )
AS 
BEGIN
  SELECT AVG(STOCK_ADJ_CLOSE) FROM (
    SELECT FIRST (:DAYS) STOCK_ADJ_CLOSE
    FROM STOCK_DAILY yd 
    WHERE yd.STOCK_STOCK=:STOCK AND yd.TRADE_DATE<=:TRADE_DATE
    ORDER BY yd.TRADE_DATE DESC
  ) INTO AVG_CLOSE;
END^

SET TERM ; ^

文档确实说:

如果<int-expr>是整数文字或查询参数,则可以省略“<code>()”

但是我假设这仅适用?于 DSQL 中的查询参数,而不适用于 PSQL 中的命名参数。

于 2013-06-29T12:53:58.350 回答