如何在oracle sql中一次删除指定表中的数据

时间:2015-10-06 07:57:40

标签: sql oracle sql-delete

我在RATOR_MONITORING架构中有40多个表,表名从'TEMP_'开始。我想在一个查询中一次删除所有这些表中的数据,而不是对每个表使用delete语句。我甚至不想生成语句。如果需要,我可以创建匿名块,但不知道如何做到这一点。我尝试了下面的查询,但它不起作用。

Delete from RATOR_MONITORING_CONFIGURATION.'%TEMP_';

1 个答案:

答案 0 :(得分:1)

如果要删除所有行,请更好地使用 TRUNCATE ,它会重置高位水印。但请记住,truncate是一个 DDL 语句,因此会有一个隐式提交;使用 DELETE ,您可以在验证后手动提交。

虽然,我不会在生产环境中这样做。如果您正在测试环境中进行构建测试数据,那么您可以(ab)使用 EXECUTE IMMEDIATE

例如,以RATOR_MONITORING user:

执行以下匿名阻止
DECLARE
  v_sql VARCHAR2(100);
BEGIN
  FOR i IN
  (SELECT table_name FROM user_tables where table_name like 'TEMP%'
  )
  LOOP
    v_sql := 'TRUNCATE TABLE '||i.table_name;
    EXECUTE immediate v_sql;
  END LOOP;
END;
/

顺便说一句,使用一个好的文本编辑器,构建DELETE / TRUNCATE语句并在纯SQL 中执行它不会超过一分钟。

相关问题