2013-06-29 95 views
1

http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip可以火鳥選擇先接受一個變量?

該手冊說FIRST接受「任何表達式計算爲整數」。這不應該是一個變量嗎?

在以下存儲過程中,嘗試提供:DAYSFIRST時出現錯誤。

Token unknown - line 10, column 18 
: 

行10列18天前的: ...

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^ 

回答

2

你需要用括號括起來的參數得到它的工作:

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中的命名參數。