應用場景: 某軟件系統中的數據庫因爲版本不斷升級,需要定期導入最新的數據表結構到測試數據庫中的不同表空間進行測試.導入的時候容易出現主鍵約束丟失問題.因此設計下面的腳本來實現批量新增主鍵約束功能.
具體操作步驟如下:
一、使用PL/SQL Developer工具連接上服務器上的某個數據庫,按F8執行下面的腳本獲取到最終要添加主鍵的SQL語句。
--Oracle使用遊標給所有數據表添加主鍵約束
declare
mytablename NVARCHAR2(200):=''; --定義要查詢的數據表名稱變量
commentsql VARCHAR2(2000):=''; --定義要輸出的執行語句字符串變量
mytablekey NVARCHAR2(20):='ID'; --定義要查詢的數據表主鍵字段名稱變量
cursor mycursor is select table_name from user_tables order by table_name;--定義遊標
myrecord mycursor%rowtype; --定義遊標記錄類型
Counter int :=0;
begin
open mycursor; --打開遊標
if mycursor%isopen then --判斷打開成功
loop --循環獲取記錄集
fetch mycursor into myrecord;
if mycursor%found then --遊標的found屬性判斷是否有記錄
begin
mytablename:=myrecord.table_name;
commentsql:='alter table '||mytablename||' add constraint PK_'||mytablename||' primary key ('||mytablekey||');';
dbms_output.put_line(commentsql);
--execute immediate commentsql;--立即執行語句(因爲很多表主鍵字段不是ID容易報錯所以註釋掉)
--commit;
end;
else
exit; --獲取遊標中的記錄
end if;
end loop;
else
dbms_output.put_line('遊標沒有打開');
end if;
close mycursor; --關閉遊標
end;
二、切換到PL/SQL Developer工具的輸出選項卡,複製最終執行語句到新的SQL窗口。
三、執行添加主鍵約束腳本 。
四、補充說明:本例測試用的數據庫中所有數據表字段中都有一個名稱爲ID的字段,執行多次後會提示一個數據表只能具有一個主鍵錯誤。