删除所有以“开始”开头的表格;分词;在Oracle SQL中

删除所有以“开始”开头的表格;分词;在Oracle SQL中,sql,oracle,Sql,Oracle,我知道这个问题可能会问很多次,但我找不到一行SQL语句。 我记得我以前做过,但现在我不记得我是怎么做的了 我想删除所有名称以“EXT_”开头的表。是否可以用一行SQL语句实现这一点。仅用一条语句是不可能的。通常,我编写sql以获取所有表,然后执行结果: select 'drop table ' || table_name || ';' from user_tables where table_name like 'EXT_%'; 您可以使用一个简短的匿名块来执行此操作 BEGIN F

我知道这个问题可能会问很多次,但我找不到一行SQL语句。 我记得我以前做过,但现在我不记得我是怎么做的了


我想删除所有名称以“EXT_”开头的表。是否可以用一行SQL语句实现这一点。

仅用一条语句是不可能的。通常,我编写sql以获取所有表,然后执行结果:

select 'drop table ' || table_name || ';'
from   user_tables
where  table_name like 'EXT_%';

您可以使用一个简短的匿名块来执行此操作

BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'EXT_%' )
  LOOP
    EXECUTE IMMEDIATE 'DROP TABLE ' || c.table_name;
  END LOOP;
END;

此代码不仅将删除EXT_u%表,还将充当删除EXT%表的角色。 下划线是用作“%”的特殊通配符,但只用于单个字符

BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'EXT_%' )
  LOOP
    EXECUTE IMMEDIATE 'DROP TABLE ' || c.table_name;
  END LOOP;
END;
为了获得期望的结果,您应该按照下面的方式更改代码

BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'EXT\_%' ESCAPE '\')
  LOOP
    EXECUTE IMMEDIATE 'DROP TABLE ' || c.table_name;
  END LOOP;
END;

它转义下划线字符以便逐字翻译,ESCAPE'\'修饰符表示转义字符是'\'

在大多数情况下,您会发现违禁品。在这种情况下,此脚本可以帮助您:

DECLARE
   c_action CONSTANT VARCHAR2(10) := 'DROP';
BEGIN
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'STARTINGTEXT_%' )
  LOOP

       FOR reg IN (SELECT uc.table_name,
                      uc.constraint_name
                 FROM user_constraints uc
                WHERE uc.table_name IN (c.table_name)) LOOP
          EXECUTE IMMEDIATE 'ALTER TABLE ' || reg.table_name || ' ' || c_action ||
                        ' CONSTRAINT ' || reg.constraint_name ;
          END LOOP;

  END LOOP;
COMMIT;  
  FOR c IN ( SELECT table_name FROM user_tables WHERE table_name LIKE 'STARTINGTEXT_%' )
  LOOP

          EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || c.table_name;
          EXECUTE IMMEDIATE  'DROP TABLE ' || c.table_name;
  END LOOP;

END;

使用此工具可以轻松地复制所有文件并执行它们。选择“放置表格”| |表格| |名称|”来自用户_表,其中表_名称类似于'EXT_uu%';是的,我就是这个意思。执行此查询,复制/粘贴结果并执行语句。还包括“级联约束”,以便在涉及外键时,删除这些表的顺序不会成为问题。