關於外來鍵約束和對應主鍵資訊的查詢指令碼

2021-09-05 03:12:28 字數 1486 閱讀 8790

初衷是想根據表中存在的外來鍵資訊得到相應的索引指令碼,後來才擴充套件到獲取相應的主鍵字段,大同小異。

這些系統表都是相類似的,例如user_cons_columns 和user_constraints, user_indexes和user_ind_columns

定義乙個函式,把多列的約束欄位以逗號串起來

create or replace function f_getconstraintcolumn(itablename in varchar2,iconstraintname in varchar2)

return varchar2 is

type cur_type is ref cursor;

mycur cur_type;

v_column1value varchar2(4000);

v_result varchar2(32767);

begin

open mycur for select column_name

from user_cons_columns

where table_name=itablename and constraint_name=iconstraintname

order by position;

loop

fetch mycur into v_column1value;

exit when mycur%notfound;

v_result:=v_result||v_column1value||',';

end loop;

close mycur;

v_result:=substr(v_result,1,length(v_result)-1);

return(v_result);

end ;

--該語句用來得到外來鍵表、外來鍵約束名稱、外來鍵字段和相應的主鍵表、主鍵字段,主鍵約束名稱等等,稍作改動便可以寫出建立相應的約束指令碼和索引指令碼

select

a.table_name foreignkeytablename, a.constraint_name,f_getconstraintcolumn(a.table_name, a.constraint_name) foreignkeycolumnsname,

a.r_constraint_name,b.table_name primarykeytablename,f_getconstraintcolumn(b.table_name, a.r_constraint_name) primarykeycolumnsname

from user_constraints a,user_constraints b

where a.constraint_type='r'

and a.r_constraint_name=b.constraint_name

-- and a.table_name = 't_factoring_inv'

order by a.table_name, a.constraint_name

關於外來鍵約束和對應主鍵資訊的查詢指令碼

初衷是想根據表中存在的外來鍵資訊得到相應的索引指令碼,後來才擴充套件到獲取相應的主鍵字段,大同小異。這些系統表都是相類似的,例如user cons columns 和user constraints,user indexes和user ind columns 定義乙個函式,把多列的約束欄位以逗號串起...

關於外來鍵約束和對應主鍵資訊的查詢指令碼

初衷是想根據表中存在的外來鍵資訊得到相應的索引指令碼,後來才擴充套件到獲取相應的主鍵字段,大同小異。這些系統表都是相類似的,例如user cons columns 和user constraints,user indexes和user ind columns 定義乙個函式,把多列的約束欄位以逗號串起...

SQL 主鍵和外來鍵約束

sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...