0

我试图找出 Oracle 11g 中是否有一种方法,我可以将 SELECT 中的结果列表存储到变量(对象)中,然后遍历该列表,对结果执行第二次查询?

基本上我想要做的是获取所有具有列名的表的列表,然后从它们的表中删除某些数据。

就像是:

var PRODUCTID_TABLE = SELECT table_name 
                        FROM user_tab_columns 
                       WHERE column_name = 'PRODUCT_ID' 
                         AND table_name NOT LIKE 'BIN%';

FOR T IN PRODUCTID_TABLE LOOP

    DELETE FROM T.TABLE_NAME WHERE PRODUCT_ID = {value};

END LOOP;
COMMIT;

提前致谢

KS

4

1 回答 1

2

您始终可以像这样生成 DELETE 语句:

SELECT 'DELETE FROM ' || table_name ||
       ' WHERE PRODUCT_ID = {value}; '
  FROM user_tab_columns
WHERE column_name = 'PRODUCT_ID' AND table_name NOT LIKE 'BIN%';

或者,如果可以选择使用 PL/SQL,您可以在 PL/SQL 块内使用 EXECUTE IMMEDIATE:

BEGIN
  FOR v_rec IN (SELECT table_name
                  FROM user_tab_columns
                WHERE column_name = 'PRODUCT_ID'
                  AND table_name NOT LIKE 'BIN%')
  LOOP
    EXECUTE IMMEDIATE 'DELETE FROM ' || v_rec.table_name ||
                      ' WHERE PRODUCT_ID = {value}; ';
  END LOOP;
END;
于 2013-10-07T11:11:16.267 回答