2017-04-23 1 views
0

SQL Plus에서 SQL Plus 사용자로 로그인하여 첫 번째 그림과 같이 로그인하고 oracle sql 개발자로부터 트리거를 실행하지만 두 번째 그림과 같이 오류가 발생합니다. 은 SYS에서 소유 한 객체에 대한 트리거를 만들 수 없습니다.

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

enter image description here

enter image description here

나는 오라클 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) ; 

이 필요합니다 (또는 원하는)하지 않도록 여기에 귀하의 의도는 ... 테이블에있는 중복이없는 생각 허용.

관련 문제