Триггер в PLSQL - PullRequest
       25

Триггер в PLSQL

0 голосов
/ 19 марта 2019

почему я получаю эту ошибку?

Вопрос) написать триггер, чтобы ограничить ввод комиссии больше, чем зарплата.

прог

SET SERVEROUTPUT ON;
CREATE OR REPLACE TRIGGER EMP2_TR
BEFORE INSERT ON EMP2
FOR EACH ROW WHEN (NEW.COMM > NEW.SAL)
BEGIN
    Raise_Application_Error (-20100, 'COMMISION MUST NOT BE GREATER THEN SALARY');      
END;
/

ошибка

SQL> INSERT INTO EMP2 VALUES(101,'RAMAN',100,1000);
INSERT INTO EMP2 VALUES(101,'RAMAN',100,1000)
            *
ERROR at line 1:
ORA-20100: COMMISION MUST NOT BE GREATER THEN SALARY
ORA-06512: at "AYUSH.EMP2_TR", line 2
ORA-04088: error during execution of trigger 'AYUSH.EMP2_TR'

таблица

SQL> DESC EMP2    
 Name                                      Null?    Type    
 ----------------------------------------- -------- -------------------------    
 EMP_NO                                             NUMBER(3)    
 NAME                                               VARCHAR2(10)    
 SAL                                                NUMBER(10,3)    
 COMM                                               NUMBER(10,2)

Ответы [ 2 ]

1 голос
/ 19 марта 2019

В вашей вставке не указан порядок значений, поэтому используется порядок столбцов в таблице.Скорее всего, столбец sal определен перед столбцом comm.

Вам необходимо перечислить столбцы в операторе вставки:

insert into emp2 
  (empid, name, comm, sal) 
values 
  (101,'RAMAN',100,1000);

, чтобы Oracle знал, какое значение принадлежит какому столбцу.

Это хорошая практика кодирования в любом случае

0 голосов
/ 19 марта 2019

Вопрос в том, почему вы делаете это с помощью триггера?

Вы должны делать это с ограничением:

alter table emp2 add constraint chk_emp2_comm_sal check (comm <= sal);
...