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。
我在 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。