DB2中的符号LOOP非法

xdyibdwo  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(165)

我有一个表,它有超过4百万条记录。所以我试图删除循环中的记录。下面是我尝试过的db2查询。

del_loop: 
LOOP
  DELETE FROM (
   SELECT FROM BOM c
   WHERE EXISTS (SELECT 1 FROM TESTOBJ t
                WHERE c.OID = t.OID
   ) FETCH FIRST 1000 ROWS ONLY
  )
IF SQLCODE = 100 THEN LEAVE del_loop;
END IF;
--COMMIT;
END LOOP loop;

但其投下误差

[Code: -104, SQL State: 42601]  ILLEGAL SYMBOL "DEL_LOOP". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: DECLARE. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.28.11

有人能帮我吗

d8tt03nd

d8tt03nd1#

您需要遵循其中一种复合语句的语法规则:inlinedcompiled中的一个或多个。

tgabmvqs

tgabmvqs2#

错误太多。
您必须使用所谓的复合语句和不同的语句分隔符,如示例中的@
下面的文本是针对Db2命令行处理器的,可以将其放置到某个文件中,并使用db2 -f myfile.sql执行,前提是您在当前会话中已连接到数据库。

--#SET TERMINATOR @
CREATE TABLE COLUMNS AS 
(
SELECT TABSCHEMA, TABNAME, COLNAME FROM SYSCAT.COLUMNS
) WITH DATA IN USERSPACE1@

BEGIN
    DECLARE SQLCODE INT;
    del_loop: 
    LOOP
        DELETE FROM 
        (
            SELECT 1 
            FROM COLUMNS 
            -- WHERE EXISTS ...
            FETCH FIRST 100 ROWS ONLY
        );
        IF SQLCODE = 100 THEN LEAVE del_loop; END IF;
        COMMIT;
    END LOOP del_loop;
END@

相关问题