http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
手册说FIRST接受“任何评估为整数的表达式”。这不应该意味着变量吗?
在以下存储过程中,我在尝试向:DAYS
提供FIRST
时出错。
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^
答案 0 :(得分:3)
您需要将参数括在括号中以使其正常工作:
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>
是整数文字或查询参数,则可以省略“()
”
但是我假设这只适用于DSQL中的?
查询参数,而不适用于PSQL中的命名参数。