2014-12-11 2 views
-1

무시 성명 나는 다음과 같은 오류가 반환됩니다PL/SQL : 트리거

PLSQL 오류 메시지와 정말 혼란 스러워요 :

Error at line 13: PL/SQL: Statement ignored 

1. create or replace TRIGGER trg before insert on pacient for each row 
2. declare 
3. rr varchar(3); 

그것은 내가 라인 (13)에 오류가 있다고 얘기하지만, .? 나를 보여 줄 3 :(어떻게 이러한 메시지에 동쪽을 향하게하는 어떤 생각 주셔서 감사합니다 여기

내 코드입니다.

create or replace TRIGGER trg before insert on pacient for each row 
declare 
    rr varchar(3); 
    mm varchar(3); 
    dd varchar(3); 
    abc varchar(4); 
    x varchar(2); 
begin 
    rr:=substr (:new.num, 1, 2); 
    mm:=substr (:new.num, 3, 2); 
    dd:=substr (:new.num, 5, 2); 
    abc:=substr (:new.num, 7, 3); 
    x:=substr (:new.num, 10, 1); 
    if mod (to_number(rr || mm || dd || abc))<>to_number(x) then raise_application_error(-20500,'wrong number'); 
    end if; 
end; 
+2

어떤 상황에서도 @Mihai의 의견에서 제안한대로하지 마십시오. SQL을 통한 할당으로 불필요한 오버 헤드가 발생하지 않더라도 트리거를 실행하는 테이블에서 선택하면 테이블 변경 오류가 발생합니다. – Allan

답변

1

내가 알아챈 한 가지는 Mod가 다른 매개 변수를 필요로한다는 것입니다. 나머지를 리턴하기 위해 숫자를 나눌 값을 지정해야합니다.

1

MOD의 기능은 두 개의 매개 변수 여야합니다.

내가 무엇을 달성하고자하는 (정말 그냥 추측)이 추측 : 당신은 MOD가 무엇

if mod (to_number(rr || mm || dd || abc),to_number(x)) != 0 then 
     raise_application_error(-20500,'wrong number'); 
    end if; 

알고 계십니까? 예 : MOD(15,6)은 3이고 MOD(18,6)은 0입니다.

어쩌면 당신은 질문을 편집하고이 모든 것이 무엇인지를 알려줄 수 있습니다.