CREATE TRIGGER RAISE_SALARY
AFTER INSERT ON EMPLOYEE
REFERENCING NEW AS newEmployee
FOR EACH ROW
BEGIN
WHEN (newEmployee.SALARY < 1500000)
UPDATE EMPLOYEE
SET newEmployee.SALARY = SALARY * 1.1
WHERE EMPNO = newEmployee.EMPNO;
END;
오류내용
오류(3,33): PLS-00103: 심볼 ";"를 만났습니다 다음 중 하나가 기대될 때: ( begin case declare end exception exit for goto if loop mod null pragma raise return select update while with
1. 구문 오류 : NEW 앞에 콜론(:)이 붙어야 합니다.
- 변경전 : newEmployee.EMPNO
- 변경후 : :newEmployee.EMPNO
2. 구문 오류 : WHEN 절의 위치 오류
- 변경전 : BEGIN WHEN ()
- 변경후 : WHEN () BEGIN
3. 논리적 오류
- 트리거 안에서 다시 해당 테이블을 조회하거나 갱신 할 수 없습니다.
- 해당 테이블을 다시 업데이트 한다고 생각하지 마세요.
- 단순하게 해당 값 자체를 바꿔주면 됩니다.
- 단 AFTER 가 아닌 BEFORE 로 동작해야 합니다.
CREATE OR REPLACE TRIGGER raise_salary BEFORE INSERT ON employee REFERENCING NEW AS newEmployee FOR EACH ROW WHEN (newEmployee.salary < 1500000) BEGIN :newEmployee.salary := :newEmployee.salary * 1.1; END; /