資料庫中的某個表a,因為業務原因被移到別的庫。麻煩的是,有幾張子表(b, c, d等)建有指向它的外來鍵,而且在建立時沒有指定統一的外鍵名。如此一來,在不同的環境(開發、測試、生產等)中該外來鍵的名稱不一樣,必須逐個去查詢外鍵名再進行刪除,十分不便。
為此,特地編寫了乙個儲存過程,只須指定子表名(b,c,d)和外來鍵的列名,直接呼叫該儲存過程即可。
oracle的儲存過程**如下:
--刪除指定表、指定列上的外來鍵(系統命名或未知名)
create
orreplace
procedure drop_fk(p_table in
varchar2, p_column in
varchar2)as
v_fk
varchar2(100
); v_sql
varchar2(1000
);begin
select a.constraint_name into v_fk from
user_cons_columns a, user_constraints b
where a.table_name=
upper(p_table) and a.column_name=
upper
(p_column)
and b.table_name=
upper(p_table) and b.constraint_type='r
'and a.constraint_name=
b.constraint_name;
v_sql :='
alter table
'|| p_table ||
'drop constraint '||
v_fk;
execute
immediate v_sql;
exception
when others then
dbms_output.put_line(
'發生錯誤
'||sqlcode||':
'||sqlerrm);
enddrop_fk;
/
postgresql的**如下:
--刪除指定表、指定列上的外來鍵(系統命名或未知名)
create
orreplace
function drop_fk(p_table in
varchar, p_column in
varchar
)returns void as
$$
declare v_fk varchar(100
);
declare v_sql varchar(1000
);begin
select tc.constraint_name into
v_fk
from information_schema.table_constraints as tc, information_schema.key_column_usage as
kcu
where tc.table_name =
lower(p_table) and kcu.column_name=
lower
(p_column)
and constraint_type =
'foreign key
'and tc.constraint_name =
kcu.constraint_name;
v_sql :='
alter table
'|| p_table ||
'drop constraint '||
v_fk;
execute
v_sql;
exception
when others then
raise exception
'(%)
', sqlerrm;
end;
$$ language plpgsql;
mysql的**如下:
delimiter //drop
procedure
ifexists drop_fk//
--刪除指定表、指定列上的外來鍵(系統命名或未知名)
create
procedure drop_fk(in p_table varchar(100), in p_column varchar(100
)) language sql
begin
declare v_fk varchar(100
);
declare v_sql varchar(1000
);
declare v_cnt int
;
select
count(*) into
v_cnt
from
information_schema.table_constraints tc, information_schema.key_column_usage tcu
where tc.table_name=
lower
(p_table)
and tcu.table_name=
lower
(p_table)
and constraint_type =
'foreign key
'and column_name=
lower
(p_column)
and tc.constraint_name=
tcu.constraint_name;
if v_cnt=
1then
select tc.constraint_name into
v_fk
from
information_schema.table_constraints tc, information_schema.key_column_usage tcu
where tc.table_name=
lower
(p_table)
and tcu.table_name=
lower
(p_table)
and constraint_type =
'foreign key
'and column_name=
lower
(p_column)
and tc.constraint_name=
tcu.constraint_name;
set v_sql = concat('
alter table
', p_table, '
drop foreign key
', v_fk);
set@sql
=v_sql;
prepare stmt from
@sql
;
execute
stmt;
deallocate
prepare
stmt;
endif;
end;
//delimiter ;
Spring Bean 未指定名稱的命名規則
spring ioc 容器中,指定名稱的方式 這些都比較好理解。那如果未指定 bean 的名稱,bean 會被如何命名呢?常見的 bean 命名規則如下 小技巧 listablebeanfactory 具有根據型別獲取 bean 集合的能力,通過此方法可以查到所有註冊的 bean 名稱 測試 spr...
小TIPS 殺掉指定名稱的程序
要殺某個指定名稱的程序,用到getprocesses方法以及kill方法,這點用在殺掉比如vba程式設計中的象word,excel等程序裡是很有效果的 sub processkill byval processname as string dim pprocess as process pproce...
小TIPS 殺掉指定名稱的程序
要殺某個指定名稱的程序,用到getprocesses方法以及kill方法,這點用在殺掉比如vba程式設計中的象word,excel等程序裡是很有效果的 sub processkill byval processname as string dim pprocess as process pproce...