创建删除外键的SQL(转)
来源:互联网 发布:java 循环替换字符串 编辑:程序博客网 时间:2024/06/08 17:23
创建删除外键的SQL
因为工作需要重建外键,手写了一个创建外键的PL_SQL,以后需要重建外键的同志就不需要自己写了,可以参照一下做法:
/*创建表db_constraint,用于保存生成的SQL*/
create table db_dmzh.db_constraint
(
constraint varchar2(4000),
tab_name varchar2(100),
cons_name varchar2(1000),
del_constraint varchar2(1000),
cjbz varchar2(1)
)
tablespace DB_ZGXT
storage
(
initial 24K
next 10M
minextents 1
maxextents unlimited
pctincrease 0
);
/*表的注释*/
comment on table DB_DMZH.db_constraint
is '代码表与外健关联表';
comment on column db_constraint.constraint
is '创建外键的sql语句';
comment on column db_constraint.tab_name
is '关联的代码表的名字';
comment on column db_constraint.cons_name
is '外键约束的名字';
comment on column db_constraint.cjbz
is '是否成功‘1’代表成功,‘0’或空代表不成功';
comment on column db_constraint.del_constraint
is '删除外键的sql语句';
delete from db_dmzh.db_constraint;
commit;
/*创建所有的关于系统维护的外键约束*/
declare
p_str varchar2(1000);
p_owner varchar2(100);
p_tabname varchar2(1000);
p_consname varchar2(1000);
p_r_constraint varchar2(1000);
p_r_owner varchar2(1000);
cursor c2 is select column_name from all_cons_columns
where owner=p_owner and table_name=p_tabname and constraint_name=p_consname order by position ;
cursor c1 is select owner,table_name,constraint_name,ltrim(r_constraint_name,substr(r_constraint_name,1,3)),r_owner
from all_constraints
where owner in ('DB_GLFW','DB_FPGL','DB_ZSJK','DB_JCGL','DB_FZZX','DB_ZGXT','DB_XTWH')
and CONSTRAINT_TYPE='R' and r_owner='DB_XTWH' ;
p_str1 varchar2(2000);
begin
open c1;
loop
fetch c1 into p_owner,p_tabname,p_consname,p_r_constraint,p_r_owner;
exit when c1%notfound;
/*内循环*/
p_str :='';
p_str1 :='';
open c2;
loop
fetch c2 into p_str1;
exit when c2%notfound;
p_str :=p_str||p_str1||','; /*生成要加外键的字段*/
end loop;
close c2;
/*内循环结束*/
select substr(p_str,1,length(p_str) - 1) into p_str from dual;
/*去多余的逗号*/
insert into db_dmzh.db_constraint (constraint,tab_name,cons_name,del_constraint)
select ' alter table '||p_owner||'.'||p_tabname||' add constraint '||p_consname||
' foreign key ('||p_str||') references '||p_r_owner||'.'||p_r_constraint
,p_r_constraint
,p_consname
,'ALTER TABLE '||p_owner||'.'||p_tabname||' drop constraint '||p_consname
from dual;
commit;
end loop;
close c1;
end;
/
/*创建表db_constraint,用于保存生成的SQL*/
create table db_dmzh.db_constraint
(
constraint varchar2(4000),
tab_name varchar2(100),
cons_name varchar2(1000),
del_constraint varchar2(1000),
cjbz varchar2(1)
)
tablespace DB_ZGXT
storage
(
initial 24K
next 10M
minextents 1
maxextents unlimited
pctincrease 0
);
/*表的注释*/
comment on table DB_DMZH.db_constraint
is '代码表与外健关联表';
comment on column db_constraint.constraint
is '创建外键的sql语句';
comment on column db_constraint.tab_name
is '关联的代码表的名字';
comment on column db_constraint.cons_name
is '外键约束的名字';
comment on column db_constraint.cjbz
is '是否成功‘1’代表成功,‘0’或空代表不成功';
comment on column db_constraint.del_constraint
is '删除外键的sql语句';
delete from db_dmzh.db_constraint;
commit;
/*创建所有的关于系统维护的外键约束*/
declare
p_str varchar2(1000);
p_owner varchar2(100);
p_tabname varchar2(1000);
p_consname varchar2(1000);
p_r_constraint varchar2(1000);
p_r_owner varchar2(1000);
cursor c2 is select column_name from all_cons_columns
where owner=p_owner and table_name=p_tabname and constraint_name=p_consname order by position ;
cursor c1 is select owner,table_name,constraint_name,ltrim(r_constraint_name,substr(r_constraint_name,1,3)),r_owner
from all_constraints
where owner in ('DB_GLFW','DB_FPGL','DB_ZSJK','DB_JCGL','DB_FZZX','DB_ZGXT','DB_XTWH')
and CONSTRAINT_TYPE='R' and r_owner='DB_XTWH' ;
p_str1 varchar2(2000);
begin
open c1;
loop
fetch c1 into p_owner,p_tabname,p_consname,p_r_constraint,p_r_owner;
exit when c1%notfound;
/*内循环*/
p_str :='';
p_str1 :='';
open c2;
loop
fetch c2 into p_str1;
exit when c2%notfound;
p_str :=p_str||p_str1||','; /*生成要加外键的字段*/
end loop;
close c2;
/*内循环结束*/
select substr(p_str,1,length(p_str) - 1) into p_str from dual;
/*去多余的逗号*/
insert into db_dmzh.db_constraint (constraint,tab_name,cons_name,del_constraint)
select ' alter table '||p_owner||'.'||p_tabname||' add constraint '||p_consname||
' foreign key ('||p_str||') references '||p_r_owner||'.'||p_r_constraint
,p_r_constraint
,p_consname
,'ALTER TABLE '||p_owner||'.'||p_tabname||' drop constraint '||p_consname
from dual;
commit;
end loop;
close c1;
end;
/
- 创建删除外键的SQL(转)
- mysql 创建索引,删除索引的sql语句 【转】
- SQL Server 2005中如何创建和删除外键
- sql表,库的创建和删除
- SQL Server 数据库的创建、删除、修改
- SQL 数据表的创建 删除 添加字段 删除整表
- Oracle创建删除的外键脚本
- 关于 SQL 外键删除的问题
- SQL server 创建与删除数据库,数据表,约束的创建与删除语法
- SQL Server 2000数据库的创建,删除,备份,还原
- Sql级联删除的创建 数据库关系图
- sql 创建多表删除的存储过程
- SQL(一)表的创建、更新和删除
- 创建和删除数据库sql及表的语句
- PL/SQL 创建新用户、删除用户及用户权限的开通
- (尚硅谷) Orcal sql ddl 数据库的 创建,修改,删除
- sql语句2——表的创建、删除
- PL/SQL 创建新用户、删除用户及用户权限的开通
- [c++]短路法则
- 图解MFC的文档/视类结构
- 关于nusoap的问题
- 回调类 及 绑定器的简单实现
- 【TUP第五期】来自一线的移动开发秘诀
- 创建删除外键的SQL(转)
- CSDN总编观察:创新与山寨——《程序员》2010第10期卷首语
- 惊喜
- Fedora 13 telnet配置
- 如何创建一个 Windows 服务应用程序的安装项目在 Visual C# 中
- 浅析Oracle存储过程触发器在数据同步中的应用
- Assignment 1: PL/SQL stored procedure P9
- SQL FOREIGN KEY 约束的建立与删除(转)
- GAIA page