![](/img/trans.png)
[英]I am trying to access the data stored in a snowflake table using python sql. Below is the columns given below i want to access
[英]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.