2011-12-22 3 views
0

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

могли бы вы помочь мне для создания триггера ..

DROP TRIGGER DB.DAT_CAMPLE_REQ_Test; 

CREATE OR REPLACE TRIGGER DB."DAT_CAMPLE_REQ_Test" 
AFTER insert or update or delete on DAT_CAMPLE_REQ 
FOR EACH ROW 
declare 
    dmltype varchar2(6); 
BEGIN 
    if deleting then 

    INSERT INTO h_dat_cample_req VALUES  (  
     :Old.REQUEST_ID,  
     :Old.SAMPLE_ID,  
     :Old.CASSAY_ID,  
     :Old.CASCADE_ID,  
     :Old.STATUS_ID,  
     :Old.AUTHOR,  
     :Old.CRT_SAE,  
     :Old.SCREEN_SAE 
    ); 

    else 

    if inserting then 

     dmltype := 'insert'; 

    elsif updating then 

     dmltype := 'update'; 

    end if; 

    INSERT INTO h_dat_cample_req VALUES 
    (
     :New.REQUEST_ID, 
     :New.SAMPLE_ID, 
     :New.CASSAY_ID, 
     :New.CASCADE_ID, 
     :New.STATUS_ID, 
     :New.AUTHOR, 
     :New.CRT_SAE,  
     :New.SCREEN_SAE 
    ); 

    end if; 

END; 
+1

Ошибка, которую вы получаете, будет большой помощью. –

+0

Trigger created with compilation error ... this is wat i getting ...... – user1111706

+0

Чтобы посмотреть ошибки, введите: 'SHOW ERRORS TRIGGER DB.DAT_CAMPLE_REQ_Test' –

ответ

0

Вы не дали точное сообщение об ошибке, ни структуру таблицы h_dat_cample_req, так что я боюсь, что я буду иметь в Угадай.

Я подозреваю, что имена столбцов в вашем h_dat_cample_req не в том порядке, в котором вы ожидаете, или в таблице есть другие столбцы, в которых вы не указали значение в своих операциях INSERT.

Вы используете операторы INSERT без указания столбцов, в которые должно входить каждое значение. Проблема с использованием этой формы выражения INSERT заключается в том, что если столбцы в таблице не соответствуют тому, что вы думаете, или есть столбцы, которые были добавлены или удалены, вы получите сообщение об ошибке, и это будет будет трудно отследить его. Кроме того, если вы не получите ошибку компиляции, все еще есть вероятность, что данные будут вставлены в неправильные столбцы. Именование столбцов дает понять, какое значение входит в этот столбец, упрощает идентификацию удаленных столбцов, а также означает, что вам не нужно указывать значения для всех столбцов в таблице - любой столбец, не указанный в списке, получает a NULL значение.

Я бы настоятельно рекомендовал всегда указывать столбцы в операциях INSERT. Другими словами, вместо того чтобы писать

INSERT INTO some_table VALUES (value_1, value_2, ...); 

записи

INSERT INTO some_table (column_1, column_2, ...) VALUES (value_1, value_2, ...); 

Кстати, вы присваиваете значение для вашей переменной dmltype, но вы не используете его значение в любом месте. Это не вызовет ошибку компиляции, но это признак того, что ваш триггер может не делать то, что вы ожидаете от него. Возможно, ваша таблица h_dat_cample_req является таблицей истории и имеет столбец для типа выполняемой операции?

Смежные вопросы