2015-07-18 2 views
0

Нужна помощь по этому триггеру, который обновляет запись, когда пользователь выполняет обновление в определенном столбце. Пример. здесь я создал таблицы, как показано ниже.Я получаю ошибку при компиляции триггера в оракуле

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. 

Нужна помощь по этому вопросу.

+0

отсутствует точка с запятой ': new.deleted_by_id: = v_username'? –

ответ

0

Отсутствует точка с запятой в этой строке:

 :new.deleted_by_id := v_username 
Смежные вопросы