SQL:从select语句返回的Alter表

问题描述 投票:0回答:2

如何更改表并删除从Select语句作为字符串返回的约束?

假设我有一个包含表的数据库:tblA,tblB,tblC等。如果我运行查询以选择满足特定条件的表,它将返回以下内容:

+------------+------------+
| table_name | constraints|
+------------+------------+
| tblA       | consX      |
+------------+------------+
| tblB       | consY      |
+------------+------------+
| tblC       | consZ      |
+------------+------------+

现在,我想更改每个表并删除它们的约束。因此,例如,不必编写select语句,获取结果,然后在以下位置键入此内容:

alter table tblA drop constraint consX; 
alter table tblB drop constraint consY;
alter table tblC drop constraint consZ;

如何在一个查询中完成所有这些步骤?

谢谢。

sql oracle
2个回答
0
投票

您可以执行以下操作:

with table_list as
( select 'Foo1' tname from dual
  union
  select 'Foo2' tname from dual
)
select 'alter table ' || tname || ' drop constraint ' || constraint_name || ';'
from user_constraints, table_list
where user_constraints.table_name = tname;

这将为每个表/约束创建一个作为alter语句构建的字符串。加在WITH子句中查询的表名。请注意,USER_CONSTRAINTS仅列出当前架构的约束。


0
投票

使用PL / SQL,我会做这样的事情:

DECLARE
  CURSOR c_query IS --REPLACE THIS WITH YOUR ACTUAL QUERY
    SELECT tableName, conName
    FROM dual;
BEGIN
  FOR rec IN c_query LOOP
    EXECUTE IMMEDIATE 'ALTER TABLE '||rec.tableName||' DROP CONSTRAINT '||rec.conName;
  END LOOP;
END;
/
© www.soinside.com 2019 - 2024. All rights reserved.