2017-12-05 16 views
0
CREATE TRIGGER x AFTER INSERT ON itemtype 
FOR EACH ROW 
DECLARE 
    minn itemtype.PRICE%type; 
BEGIN 
select MIN(itemtype.PRICE) into minn from itemtype; 
IF (:new.PRICE > minn*4) then RAISERROR('Custom text'); 
END IF; 
END; 
/ 

내가 itemtype.PRICE 열 값과 itemtype에 새 항목을 삽입하려고 할 때이 오류가 발생하는 트리거를 만들 수보다 4 배 현재 저가 항목에 노력하고있어를 선언해야합니다 탁자.'RAISERROR는'

트리거를 만들려고하면 이러한 컴파일 오류가 발생합니다.

LINE/COL ERROR 
-------- -------------------------------------------------------------- 
5/31  PL/SQL: Statement ignored 
5/31  PLS-00201: identifier 'RAISERROR' must be declared 

또한 준수

CREATE TRIGGER x AFTER INSERT ON itemtype 
    FOR EACH ROW 
    DECLARE 
     minn itemtype.PRICE%type; 
    BEGIN 
    select MIN(itemtype.PRICE) into minn from itemtype; 
    if (:new.PRICE > minn*4) then raise_application_error(-20010,'Too Expensive'); 
    END IF; 
    END; 
    /

을 시도,하지만 난 테이블에 새 항목을 삽입 할 때 나는 나의 트리거가 실패라고 논문의 오류를 얻을.

SQL> insert into itemtype(ITEMNUM,NAME,PICTURE,PRICE,BELONGSTO) VALUES ('A11','The who knows','',10.99,'P'); 
    insert into itemtype(ITEMNUM,NAME,PICTURE,PRICE,BELONGSTO) VALUES ('A11','The who knows','',10.99,'P') 
       * 
    ERROR at line 1: 
    ORA-04091: table USERNAME.ITEMTYPE is mutating, trigger/function may not see it 
    ORA-06512: at "USERNAME.X", line 5 
    ORA-04088: error during execution of trigger 'USERNAME.X' 
+0

('사용자 정의 텍스트', 10, 1); 와 같은 오류가 발생합니다. – glassofwotah

+0

이 정보가 도움이됩니까? https://stackoverflow.com/questions/6020450/oracle-pl-sql-raise-user-defined-exception-with-custom-sqlerrm –

+0

여기 뭔가 잘못된 태그가 있다고 생각합니다. 오류가 PL/SQL을 참조하지만 이것은 MySQL 태그입니다. RAISE를 시도하십시오. https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/raise_statement.htm –

답변

0

트리거에서 PRAGMA AUTONOMOUS_TRANSACTION을 사용해보세요.

이 질문에 대한 내 대답을 봐 : 나는 또한 RAISERROR 시도 SQL trigger on delete mutating table

+0

내 대답이 귀하의 질문에 대한 해결책 인 경우 피드백을 보내주십시오. –