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 に答える