2017-04-23 69 views
0

我從sql plus用戶(而不是sys)登錄到第一張圖片,並從oracle sql developer運行觸發器,但是它使第二張圖片中出現錯誤。無法在SYS擁有的對象上創建觸發器

enter image description here

ORA-04089: cannot create triggers on objects owned by SYS

enter image description here

我使用Oracle 12c和不知道我的觸發代碼是否是完全正確的。我的目的是當有人嘗試添加相同的ogrenci_no(student_number)時顯示警告。我能爲此做些什麼?

回答

1

如果您授予該用戶的SYSDBA權限,那麼您將間接使用SYS帳戶。以下是關於如何創建簡單用戶來存儲表格的視頻。現在

https://www.youtube.com/watch?v=WDJacg0NuLo

,到你的扳機。您通常不會在觸發器中發出回滾(或提交),因爲它可能是更大事務的一部分。你想要做什麼是產生一個錯誤,將放棄該發射扳機的說法,如

if :new.col = :old.col then 
    raise_application_error(-20000,'You did not change the value'); 
end if; 

但當然,這是不會在你的情況下工作,因爲你捕捉一個INSERT語句,所以有是'舊'價值。我想在這裏你的意圖沒有在表中的任何重複...所以你並不需要(或希望)對於這一點,你想有一個唯一約束觸發,例如

alter table MY_TABLE add constraint MY_TABLE_UQ unique (ogrenci_no) ; 

,這將防止重複被允許。