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

How to delete data from specified tables at once in oracle sql

我在 RATOR_MONITORING 模式中有超过 40 个 table,table 名称从 'TEMP_' 开始。我想在单个查询中一次从所有此类 table 中删除数据,而不是对每个 table 使用 delete 语句。我什至不想生成语句。如果需要,我可以创建匿名块,但不知道该怎么做。我尝试了以下查询,但它不起作用。

Delete from RATOR_MONITORING_CONFIGURATION.'%TEMP_';

如果你想删除所有的行,那么最好使用TRUNCATE,它会重置high watermark。但是请记住,truncate 是一个 DDL 语句,因此会有一个 implicit commit;使用 DELETE 您可以在验证后手动提交。

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

例如,以RATOR_MONITORING用户身份执行以下匿名块:

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 语句并在 [=20= 中执行它不会超过一分钟]纯SQL。