在Oracle中循环并执行动态查询

时间:2016-10-19 08:46:12

标签: sql oracle

我在截断一些在我的基础中生成的表时遇到了一些麻烦。 表名保存,我可以手动完成,但我想看看它是否可以自动修复。

到目前为止,我所做的是将所有表名和id /号放入我自己的帮助表中。我的错误开始于循环/执行立即我不知道如何使用我在语法中得到的数据,我无法找到任何类似的例子。

create table HlpTruncTable as SELECT SUBSTR(argument, 3) as tblName, rownum as Nr 
FROM tblLogHlp
WHERE status = 'E' and argument like '0,awfh%' and LAST_UPDATE <= ADD_MONTHS(sysdate,-1);

for i in 1..(select max(nr) from HlpTruncTable) LOOP   
     execute immediate TRUNCATE TABLE (select tblName from HlpTruncTable where nr = (i));    
END LOOP;

drop table hlpTruncTable;

1 个答案:

答案 0 :(得分:4)

我会这样做:

declare

cursor HlpTruncTable is 
SELECT SUBSTR(argument, 3) as tblName
FROM tblLogHlp
WHERE status = 'E' and argument like '0,awfh%' and LAST_UPDATE <= ADD_MONTHS(sysdate,-1);

BEGIN
   FOR aTable IN HlpTruncTable LOOP
      execute immediate 'TRUNCATE TABLE '||aTable.tblName;
   END LOOP;
END;