我现在知道两个表的所有信息,而且一张表的主键是另一张表的外键。(除了外键约束的名称)我现在怎样获得外间名称?因为原来有A、B、C三张表,A的一个字段是引用B的主键作为外键。我现在要删除这个外键约束,但有好几个数据库。我不确定这个外键的名称在不同的数据库中是不是一样。我能不能使用sql先获得这个外键的名称?
解决方案 »
- Oracle9i 中如何更改数据库的表空间?
- 弱弱的吼一嗓子。。。
- 菜鸟求救!重启orcal服务后数据库打不开.
- 请教:10g 的本地捕获和下游捕获到底哪个的延迟时间较长啊?
- 想把一个数据库里面的表结构及数据完全覆盖到另一个数据库中!
- 在pb向oracle过程传date型参数时,报无效月份错误,调用过程错误!!!望指点
- 一个关于ROWNUM的问题
- tab 和 all_tables 有什么区别呢?
- 涉及到两行记录的金额计算问题??
- 如何卸掉win2000控制面板-管理工具-服务列表中oracle各种服务
- oracle8i客户端连接oracle10G服务端
- 求助,分区表之上建立视图,查询时不走索引的问题
使用sql语句应该也可以吧,网上搜搜
SELECT ou.NAME owner, oc.NAME constraint_name,
o.NAME table_name, ru.NAME r_owner, rc.NAME r_constraint_name,
rcobj.NAME r_table_name,
DECODE(c.TYPE#, 4,
DECODE(c.refact, 1, 'CASCADE', 2, 'SET NULL', 'NO ACTION'),
NULL) delete_rule,
DECODE(c.TYPE#, 5, 'ENABLED',
DECODE(c.enabled, NULL, 'DISABLED', 'ENABLED')) status,
DECODE(BITAND(c.defer, 1), 1, 'DEFERRABLE', 'NOT DEFERRABLE') DEFERRABLE,
DECODE(BITAND(c.defer, 2), 2, 'DEFERRED', 'IMMEDIATE') DEFERRED,
DECODE(BITAND(c.defer, 4), 4, 'VALIDATED', 'NOT VALIDATED') validated,
DECODE(rcdef.TYPE#, 2, 'PK', 3, 'U') R_constraint_type
FROM sys.con$ oc, sys.con$ rc, sys.USER$ ou, sys.USER$ ru,
sys.obj$ o, sys.cdef$ c, sys.cdef$ rcdef, sys.obj$ rcobj
WHERE oc.owner# = ou.USER#
AND oc.con# = c.con#
AND c.obj# = o.obj#
AND c.rcon# = rc.con#
AND rc.owner# = ru.USER#
AND c.TYPE# = 4
AND rcdef.con# = rc.con#
AND rcobj.obj# = rcdef.obj#
AND rcdef.TYPE# IN (2,3)
AND ru.NAME = :user
AND rcobj.NAME = :table
order by 1,3
其中两个变量
:user 为你要查的表所在用户
:table 为表名
可以写个过程,取出约束名,动态语句drop掉
forgkey varchar2(20);
sqlstr varchar2(1000);
begin
select a.constraint_name into forgkey from user_constraints a,user_constraints b
where a.r_constraint_name=b.constraint_name
and a.constraint_type='R'
and a.table_name='A'
and b.table_name='B';
execute immediate 'alter table a drop constraint '||forgkey;
end;