http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
手册说 FIRST 接受“任何计算为整数的表达式”。这不也应该意味着一个变量吗?
在以下存储过程中,我在尝试向 FIRST
提供 :DAYS
时遇到错误。
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^
最佳答案
您需要将参数括在括号中才能使其正常工作:
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 ; ^
文档确实说:
If
<int-expr>
is an integer literal or a query parameter, the “()
” may be omitted
但是我认为这仅适用于 ?
DSQL 中的查询参数,而不是 PSQL 中的命名参数。
关于firebird - Firebirds SELECT FIRST 可以接受变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380120/