2011-12-04 15 views
1

私は以下のエラーが発生し続けており、理由を理解できません。私はコードにテーブルを含め、エラーを提示しているコード部分も含めました。コード内14行目のエラー:PL/SQL:SQL文が無視されました

テーブル:

CREATE TABLE Employee (
    emp_id number(8) primary key, 
    f_name VarChar2(20), 
    l_name VarChar2(20), 
    address VarChar2(40), 
    city VarChar2(20), 
    state Char(2), 
    zip Number(5), 
    phone_Number Number(10), 
    email_address VarChar2(30), 
    dept_id number(8) references department(Dept_ID), 
    office_location VarChar2(30) 
); 

CREATE TABLE audit_detail (
    audit_detail_id number(8) primary key, 
    field varchar2(30), 
    old_value varchar2(30), 
    new_value varchar2(30) 
); 

CREATE TABLE audit_trail (
    audit_trail_id number(8) primary key, 
    user_id number(8)references user_id_table(user_id), 
    table_name VarChar2(25), 
    process VarChar2(25), 
    emp_id number(8)references employee(emp_id), 
    timestamp Date 
); 

Create table Department (
    dept_id number(8) primary key, 
    dept_name VarChar2(20) not null, 
    dept_start_date date 
); 

create table user_id_table(
    user_id number(8) primary key, 
    emp_id number(8) references Employee(emp_id) 
); 

CREATE SEQUENCE audit_seq; 

これは削除した後、あなたのelse文は5を持って、エラーを提示している部分、具体的にELSIF削除部分

CREATE OR REPLACE TRIGGER audit_employee 
AFTER INSERT OR UPDATE OR DELETE ON Employee 
FOR EACH ROW 
DECLARE 
    timestamp DATE; 
    session_user number(8); 
BEGIN 
    timestamp := SYSDATE; 
    session_user := USERENV('SESSION_USER'); 
    IF INSERTING THEN 
     INSERT INTO audit_trail VALUES 
     (Audit_seq.NEXTVAL, session_user, 'Employee', 'INSERT', :new.emp_id, timestamp); 
    ElSIF DELETING THEN 
     INSERT INTO audit_trail Values 
     (Audit_seq.NEXTVAL, session_user, 'Employee', 'DELETE', :old.emp_id, timestamp); 
    Else 
     INSERT INTO audit_trail 
     Values(Audit_seq.NEXTVAL, session_user, 'Employee', 'UPDATE', :old.emp_id); 
     IF UPDATING ('f_name') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'f_name', :old.f_name, :new.f_name); 
     ELSIF UPDATING('l_name') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'l_name', :old.l_name, :new.l_name); 
     ELSIF UPDATING('address') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'address', :old.address, :new.address); 
     ELSIF UPDATING('city') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'city', :old.city, :new.city); 
     ELSIF UPDATING('state') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'state', :old.state, :new.state); 
     ELSIF UPDATING('zip') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'zip', :old.zip, :new.zip); 
     ELSIF UPDATING('phone_Number') THEN 
      INSERT INTO Audit_detail VALUES 
      (Audit_seq.CURRVAL, 'phone_Number', :old.phone_number, :new.phone_number); 
     ELSIF UPDATING('email_address') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'email_address', :old.email_address, :new.email_address); 
     ELSIF UPDATING('dept_id') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'dept_id', :old.dept_id, :new.dept_id); 
     ELSIF UPDATING('office_location') THEN 
      INSERT INTO audit_detail VALUES 
      (Audit_seq.CURRVAL, 'office_location', :old.office_location, :new.office_location); 

     End IF; 
    End IF; 
End; 
/
+0

エラー14行目のエラー:PL/SQL:SQL文が無視された可能性が最も高いのは、エラーメッセージの一部です。完全なエラーメッセージを投稿してください。 – Codo

答えて

1

です列は、audit_trailは6です。

ElSIF DELETING THEN 
    INSERT INTO audit_trail 
    Values (Audit_seq.NEXTVAL, session_user, 'Employee' 
      , 'DELETE', :old.emp_id, timestamp); 
Else 
    INSERT INTO audit_trail 
    Values (Audit_seq.NEXTVAL, session_user, 'Employee' 
      , 'UPDATE', :old.emp_id); 

また、小文字の列ではなく、UPDATING ('L_NAME')という列も参照しています。それが問題を引き起こすかどうかはわかりません。

暗黙的な数値から文字への変換を頻繁にやっているため、最終的にあなたを捕まえることができ、audit_trailのtable_nameは25文字ではなく30文字でなければなりません。

関連する問題