在某些代码后打开游标

时间:2015-02-26 10:50:53

标签: sql cursor db2

我在DB2中有一些存储过程。一些代码行( INSERT UPDATE 等)。在一些操作之后我有IF条件打开/不打开CURSOR。由于某种原因,即使IF条件为TRUE,CURSOR也不会打开。 CURSOR之前的所有代码都可以正常工作。如果我将它删除,那么CURSOR将正常工作。如果我将CURSOR放在单独的SP中,它可以正常工作(从此SP调用另一个SP)。但由于某种原因,它不起作用。我不明白为什么。我需要这个代码用于IF条件。

这就是它的外观(只有一行INSERT在CURSOR之外):

DECLARE C1 CURSOR WITH HOLD FOR
SELECT s.KEY, s.CODE, s.PRODUCT, s.AMOUNT
FROM DB2ADMIN.SALES s, DB2ADMIN.PRODUCTS p
WHERE s.DATE_KEY = CDC AND s.PRODUCT_KEY = p.PRODUCT_KEY;

  DECLARE CONTINUE HANDLER FOR NOT FOUND
SET EOF = 1;

  INSERT INTO DB2ADMIN.IA_BASE_SALES_TMP (SOME_FIELD) VALUES (SOME_VALUE);

   IF true THEN
      OPEN C1;
      WHILE EOF = 0 DO

        FETCH FROM C1 INTO SP_KEY, SP_CODE, SP_KEY, SP_PRODUCT, SP_AMOUNT;

        MERGE INTO DB2ADMIN.IA_BASE_SALES_TMP t
        USING (
              SELECT POS, p.KEY, s.TELLER, s.TYPE, s.AMOUNT, s.CDC
              FROM DB2ADMIN.COMMISSIONS s, DB2ADMIN.PRODUCTS p
              WHERE TELLER = SP_TELLER AND TYPE = SP_TYPE 
          ) e ON t.TELLER_KEY = e.TELLER_ID         
          WHEN matched          
         THEN UPDATE SET t.KEY = e.KEY, t.UPD = 0;

      END WHILE;
      CLOSE C1;

    END IF;

1 个答案:

答案 0 :(得分:0)

感谢Jean。

用FOR循环替换光标,一切正常。