【问题标题】:DB2 FOR Cursor Inside Trigger ErrorDB2 FOR 光标内部触发错误
【发布时间】:2018-03-07 22:53:53
【问题描述】:

我正在尝试遍历表中的trip_numbers 列表。每当我尝试使用 FOR 循环时,都会收到以下错误:

错误:在“cur1”之后发现了一个意外的标记“CURSOR”。预期的标记可能包括:“JOIN”。 SQLSTATE-42601

CREATE TRIGGER SCHEMA.UPDATE_OP_CODE_2 

AFTER UPDATE OF USER1 ON TLORDER 

REFERENCING NEW AS N 

FOR EACH ROW 

MODE DB2SQL 

BEGIN ATOMIC 

DECLARE mTRIP_NUMBER INTEGER; --

FOR v AS cur1 CURSOR FOR (SELECT TRIP_NUMBER FROM ITRIPTLO WHERE 
DETAIL_LINE_ID  =  N.DETAIL_LINE_ID)--

DO
SET mTRIP_NUMBER  = cur1.TRIP_NUMBER;

IF (mTRIP_NUMBER IS NOT NULL AND mTRIP_NUMBER != 0) THEN 

    CALL DF_SAVELEGINTERSECTION(mTRIP_NUMBER, 'True'); --

    CALL OPTIMIZE_CARRIER(mTRIP_NUMBER); --

    CALL DF_CALCULATETRIPTOTALS(mTRIP_NUMBER, 'True'); --

END IF; --
END FOR;
END 

我不能在触发器中使用 FOR 循环/游标吗?

【问题讨论】:

    标签: database db2 cursor


    【解决方案1】:

    删除“cur1 CURSOR FOR”。触发器的“内联复合”不支持此功能。

      CREATE TRIGGER SCHEMA.UPDATE_OP_CODE_2 
    
      AFTER UPDATE OF USER1 ON TLORDER 
    
      REFERENCING NEW AS N 
    
      FOR EACH ROW 
    
      MODE DB2SQL 
    
      BEGIN ATOMIC 
    
        DECLARE mTRIP_NUMBER INTEGER; --
    
        FOR v AS (SELECT TRIP_NUMBER FROM ITRIPTLO WHERE DETAIL_LINE_ID  =  N.DETAIL_LINE_ID)--
    
        DO
    
          SET mTRIP_NUMBER  = TRIP_NUMBER;--
    
          IF (mTRIP_NUMBER IS NOT NULL AND mTRIP_NUMBER != 0) THEN 
    
            CALL DF_SAVELEGINTERSECTION(mTRIP_NUMBER, 'True'); --
    
            CALL OPTIMIZE_CARRIER(mTRIP_NUMBER); --
    
            CALL DF_CALCULATETRIPTOTALS(mTRIP_NUMBER, 'True'); --
    
          END IF; --
    
        END FOR;--
    
      END 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2018-05-27
      相关资源
      最近更新 更多