我想参数化表\u to \u be \u deleted table in below stored proc

niwlg2el  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(376)

但不是通过获取参数变量,我有一个表,其中包含所有的表信息,从那里我想采取一个接一个表名完成删除获取另一个表名
开始
声明sqlstate char(5)默认为“00000”;
loop1:当sqlstate='00000'do时
delete from .table \u to \u be \u deleted where id in中
(从.id\u dim中选择id)仅使用ur获取前2000000行;
如果sqlstate='02000',则--not found
离开回路1;
结束if;
承诺;
结束时;
结束@

yzxexxkh

yzxexxkh1#

如果我的目标正确的话,可以从动态列表中批量删除多个表中的行。

  1. BEGIN
  2. DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
  3. FOR V AS C1 CURSOR WITH HOLD FOR
  4. SELECT 'DELETE FROM (SELECT 1 FROM ' || TABNAME || ' T WHERE EXISTS (SELECT 1 FROM ABC.ID_DIM D WHERE D.ID = T.ID) FETCH FIRST 2000000 ROWS ONLY WITH UR)' AS STMT
  5. FROM TABLE_WITH_COLUMN_TABNAME
  6. DO
  7. L1: LOOP
  8. EXECUTE IMMEDIATE V.STMT;
  9. IF SQLSTATE = '02000' THEN LEAVE L1; END IF;
  10. COMMIT;
  11. END LOOP;
  12. END FOR;
  13. END@
hjqgdpho

hjqgdpho2#

我要做的是在游标中获取表的结果,然后循环它们
类似于:

  1. DECLARE Tables_cursor CURSOR FOR SELECT table_name FROM table_of_tables
  2. OPEN Tables_cursor
  3. FETCH NEXT FROM Tables_cursor INTO @table_name
  4. DELETE FROM @table_name where ID in
  5. (select ID from ABC.ID_DIM ) FETCH FIRST 2000000 ROWS ONLY WITh UR;
  6. WHILE @@FETCH_STATUS = 0
  7. BEGIN
  8. FETCH NEXT FROM Tables_cursor INTO @table_name
  9. END

我从来没用过,但我想应该是这样的:

  1. EXEC SQL DECLARE C1 CURSOR FOR
  2. SELECT tablename FROM table_of_tables
  3. EXEC SQL OPEN C1;
  4. DO WHILE (SQLCODE = 0);
  5. EXEC SQL FETCH C1 INTO :TABLE_NAME
  6. DELETE FROM TABLE_NAME as curentTable where ID in
  7. (select ID from ABC.ID_DIM ) FETCH FIRST 2000000 ROWS ONLY WITh UR;
  8. END;
  9. EXEC SQL CLOSE C1;
展开查看全部

相关问题