Нужна помощь по этому триггеру, который обновляет запись, когда пользователь выполняет обновление в определенном столбце. Пример. здесь я создал таблицы, как показано ниже.Я получаю ошибку при компиляции триггера в оракуле
CREATE TABLE orders
(order_id number(5),
quantity number(4),
status_c varchar2(15),
delete_date date,
deleted_by_id varchar2(10));
Я вставил в него 2 записи, как показано ниже.
insert into orders values (1,25,'FAILED',null,null);
insert into orders values (1,50,'QUEUED',null,null);
select * from orders;
ORDER_ID КОЛИЧЕСТВО STATUS_C DELETE_DA DELETED_BY
1 25 FAILED
1 50 QUEUED
Теперь мы можем увидеть значения для столбца STATUS_C как 'Failed' и 'QUEUED'
Так что всякий раз, когда новые обновления пользователей это table - orders, и сделайте статус «DELETED» для status_c, тогда мне нужно записать его данные, такие как person_id и sysdate. Поэтому я написал триггер ниже на этом столе - Заказы
CREATE OR REPLACE TRIGGER orders_before_update
BEFORE UPDATE
ON orders
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
If UPDATING then
if upper(:new.status_c) = 'DELETED' then
-- Find username of person performing UPDATE on the table
SELECT user INTO v_username
FROM dual;
-- Update delete_date field to current system date
:new.delete_date := sysdate;
-- Update deleted_by_id field to the username of the person performing the UPDATE
:new.deleted_by_id := v_username
end if;
end if;
END;
/
Предупреждение: Триггер, созданный с ошибками компиляции.
У меня ошибка при компиляции.
Я попытался udpate таблицы, чтобы увидеть его влияние,
update orders set status_c = 'DELETED' where order_id = 1;
update orders set status_c = 'DELETED' where order_id = 1
*
ERROR at line 1:
ORA-04098: trigger 'DISDBA.ORDERS_BEFORE_UPDATE' is invalid and failed re-validation
мне нужно помощь, что является проблемой в триггере, и почему она не компилируется.
Когда я проверил ошибку, используя нижеследующий запрос. это говорит.
`select * from user_errors where type = 'TRIGGER' and name` ='ORDERS_BEFORE_UPDATE';
NAME TYPE SEQUENCE LINE POSITION
------------------------------ ------------ ---------- ---------- ----------
TEXT
----------------------------------------------------------------------------------------------------
ORDERS_BEFORE_UPDATE TRIGGER 1 20 5
PLS-00103: Encountered the symbol "END" when expecting one of the following:
. (* @ % & = - + ; </> at in mod not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like
between is null is not || is dangling
The symbol ";" was substituted for "END" to continue.
Нужна помощь по этому вопросу.
отсутствует точка с запятой ': new.deleted_by_id: = v_username'? –