Пока вы не предоставите ответы на вопросы, которые я разместил в комментарии, вот как вы можете это сделать. Посмотри, сможешь ли ты это отрегулировать.
Таблица EMP_TEST содержит только одну строку (что-то вроде глупо ; вы предпочитаете использовать значение DEFAULT для этих столбцов в таблице EMP).
SQL> create table emp_test (sal number, comm number);
Table created.
SQL> insert into emp_test (sal, comm) values (3000, 100);
1 row created.
Триггер принимает значения SAL и COMM, если они предоставляются; в противном случае он принимает значения из таблицы EMP_TEST.
SQL> create or replace trigger trg_bi_emp
2 before insert on emp
3 for each row
4 begin
5 select nvl(:new.sal, t.sal),
6 nvl(:new.comm, t.comm)
7 into :new.sal,
8 :new.comm
9 from emp_test t;
10 end;
11 /
Trigger created.
Тестирование: я не предоставил значение SAL (поэтому триггер вставит единицу EMP_TEST), но я предоставил COMM:
SQL> insert into emp (empno, ename, deptno, sal, comm)
2 values (1, 'Littlefoot', 40, null, 50);
1 row created.
SQL> select * from emp where empno = 1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
1 Littlefoot 3000 50 40
SQL>