【问题标题】:DB2 Stored Procedure parameter "is not valid in the context where it is used"DB2 存储过程参数“在使用它的上下文中无效”
【发布时间】:2014-06-18 15:40:22
【问题描述】:

我正在尝试创建以下存储过程:

-- <ScriptOptions statementSeparator="@"/>
-- <ScriptOptions errors="off" platform390="off"/>
@
DROP SPECIFIC PROCEDURE DEPCLH.GetTransactionSummaryByDateRange@

CREATE PROCEDURE  DEPCLH.GetTransactionSummaryByDateRange (in p_DCHDSB_ID INTEGER,in p_StartDate varchar(50),in p_EndDate varchar(50)) 
SPECIFIC  DEPCLH.GetTransactionSummaryByDateRange
LANGUAGE SQL
RESULT SET 1@

BEGIN

DECLARE C_OUTPUT CURSOR WITH RETURN FOR
SELECT
sub.DCHDSB_ID AS FACILITYID,
sub.DCHDSB_CODE AS FACILITYCODE,
sub.NAME AS FACILITYNAME,
SUM(dep.AMOUNT) "TOTALAMOUNT",
COUNT(*) "TRANSACTIONCOUNT"
FROM DEPCLH.DEPOSIT_SUBSCRIBER sub
INNER JOIN DEPCLH.DEPOSIT dep ON dep.DCHDSB_ID=sub.DCHDSB_ID
WHERE sub.DCHDSB_ID=p_DCHDSB_ID AND dep.CREATED_TS BETWEEN p_StartDate AND p_EndDate
GROUP BY sub.DCHDSB_ID,sub.DCHDSB_CODE,sub.NAME
FOR READ ONLY;

OPEN C_OUTPUT;

END 
@

GRANT EXECUTE ON SPECIFIC PROCEDURE  DEPCLH.GetTransactionSummaryByDateRange TO PUBLIC
@

COMMIT
@

我收到以下错误:

DB21034E 该命令被作为 SQL 语句处理,因为它是 不是有效的命令行处理器命令。在 SQL 处理期间 返回:SQL0206N“P_DCHDSB_ID”在它所在的上下文中无效 用来。第 3 行。 SQLSTATE=42703

【问题讨论】:

  • 我认为问题在于你在CREATE PROCEDURE语句中间有一个语句终止符@:LANGUAGE SQL RESULT SET 1@ BEGIN
  • @mustaccio 这就是问题所在。谢谢你。上面发布的解决方案。

标签: sql db2


【解决方案1】:

在代码中发现错字。谢谢你的好眼光!

-- <ScriptOptions statementSeparator="@"/>
    -- <ScriptOptions errors="off" platform390="off"/>
    @
    DROP SPECIFIC PROCEDURE DEPCLH.GetTransactionSummaryByDateRange@

    CREATE PROCEDURE  DEPCLH.GetTransactionSummaryByDateRange (in p_DCHDSB_ID INTEGER,in p_StartDate varchar(50),in p_EndDate varchar(50)) 
    SPECIFIC  DEPCLH.GetTransactionSummaryByDateRange
    LANGUAGE SQL
    RESULT SET 1

    BEGIN

    DECLARE C_OUTPUT CURSOR WITH RETURN FOR
    SELECT
    sub.DCHDSB_ID AS FACILITYID,
    sub.DCHDSB_CODE AS FACILITYCODE,
    sub.NAME AS FACILITYNAME,
    SUM(dep.AMOUNT) "TOTALAMOUNT",
    COUNT(*) "TRANSACTIONCOUNT"
    FROM DEPCLH.DEPOSIT_SUBSCRIBER sub
    INNER JOIN DEPCLH.DEPOSIT dep ON dep.DCHDSB_ID=sub.DCHDSB_ID
    WHERE sub.DCHDSB_ID=p_DCHDSB_ID AND dep.CREATED_TS BETWEEN p_StartDate AND p_EndDate
    GROUP BY sub.DCHDSB_ID,sub.DCHDSB_CODE,sub.NAME
    FOR READ ONLY;

    OPEN C_OUTPUT;

    END 
    @

    GRANT EXECUTE ON SPECIFIC PROCEDURE  DEPCLH.GetTransactionSummaryByDateRange TO PUBLIC
    @

    COMMIT
    @

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多