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

bq_wang發表於2007-12-20

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

這些系統表都是相類似的,例如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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-145591/,如需轉載,請註明出處,否則將追究法律責任。

相關文章