刪除未指定名稱的外來鍵的儲存過程

2022-03-30 12:04:18 字數 3628 閱讀 6218

資料庫中的某個表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...