http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
手册说 FIRST 接受“任何计算为整数的表达式”。这不也应该意味着一个变量吗?
:DAYS在以下存储过程中,我在尝试提供给时遇到错误FIRST。
Token unknown - line 10, column 18
:
Run Code Online (Sandbox Code Playgroud)
第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^
Run Code Online (Sandbox Code Playgroud)
您需要将参数括在括号中才能使其正常工作:
\n\nSELECT FIRST (:DAYS) STOCK_ADJ_CLOSE\nRun Code Online (Sandbox Code Playgroud)\n\n完整代码:
\n\nSET TERM ^ ;\n\nCREATE PROCEDURE P_STOCK_MDA \n ( STOCK BIGINT, TRADE_DATE DATE, DAYS SMALLINT ) \nRETURNS \n ( AVG_CLOSE NUMERIC(6,2) )\nAS \nBEGIN\n SELECT AVG(STOCK_ADJ_CLOSE) FROM (\n SELECT FIRST (:DAYS) STOCK_ADJ_CLOSE\n FROM STOCK_DAILY yd \n WHERE yd.STOCK_STOCK=:STOCK AND yd.TRADE_DATE<=:TRADE_DATE\n ORDER BY yd.TRADE_DATE DESC\n ) INTO AVG_CLOSE;\nEND^\n\nSET TERM ; ^\nRun Code Online (Sandbox Code Playgroud)\n\n该文档确实说:
\n\n\n\n\n如果
\n<int-expr>是整数文字或查询参数,则 \xe2\x80\x9c()\xe2\x80\x9d 可以省略
但是我假设这仅适用于?DSQL 中的查询参数,不适用于 PSQL 中的命名参数。