簡體   English   中英

我想在下面存儲的 PROC 中參數化 TABLE_TO_BE_DELETED 表

[英]I want to parameterize TABLE_TO_BE_DELETED table in below stored PROC

但不是通過獲取參數變量,我有一個表,其中包含所有表信息,我想一個接一個地獲取表名完成刪除獲取另一個表名

開始
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
loop1: WHILE SQLSTATE = '00000' 做
從 ABC.TABLE_TO_BE_DELETED 刪除其中 ID 在
(從 ABC.ID_DIM 中選擇 ID)僅使用 UR 獲取第一個 2000000 行;

IF SQLSTATE = '02000' THEN -- 未找到
離開循環1;
萬一;
犯罪;
結束;
結尾@

我要做的是在 cursor 中獲取表的結果,然后循環它們

類似的東西:

DECLARE Tables_cursor CURSOR FOR SELECT table_name FROM table_of_tables

OPEN Tables_cursor
FETCH NEXT FROM Tables_cursor INTO @table_name

DELETE FROM @table_name where ID in
(select ID from ABC.ID_DIM ) FETCH FIRST 2000000 ROWS ONLY WITh UR;

WHILE @@FETCH_STATUS = 0
BEGIN

    FETCH NEXT FROM Tables_cursor INTO @table_name
END 

我從未使用過,但我認為它會是這樣的:

   EXEC SQL DECLARE C1 CURSOR FOR
     SELECT tablename  FROM table_of_tables

    EXEC SQL OPEN C1;
    DO WHILE (SQLCODE = 0);
     EXEC SQL FETCH C1 INTO :TABLE_NAME
     DELETE FROM TABLE_NAME as curentTable where ID in
     (select ID from ABC.ID_DIM ) FETCH FIRST 2000000 ROWS ONLY WITh UR;
    END;
    EXEC SQL CLOSE C1;

對於動態列表中多個表的大量刪除行,如果我的目標正確的話。

BEGIN
  DECLARE SQLSTATE CHAR(5) DEFAULT '00000';

  FOR V AS C1 CURSOR WITH HOLD FOR 
   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 
   FROM TABLE_WITH_COLUMN_TABNAME
  DO
    L1: LOOP
      EXECUTE IMMEDIATE V.STMT;
      IF SQLSTATE = '02000' THEN LEAVE L1; END IF;
      COMMIT;
    END LOOP;
  END FOR;
END@

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM