2017-11-17 4 views
0

あまりにも多くの私は、これは私が行2のエラー:PL/SQL:文が無視されました。エラー(2,17):PL/SQL:ORA-00913:値

CREATE OR REPLACE TRIGGER loan_audit_trigger 
AFTER INSERT OR UPDATE OR DELETE 
ON loan_02 
FOR EACH ROW 
BEGIN 
    IF INSERTING THEN 
    INSERT INTO loan_audit VALUES 
    (:new.employee_id, :new.tool_no, :new.tool_out_date, :new.due_date, 'INSERTED', SYSDATE); 
    ELSIF UPDATING THEN 
    INSERT INTO loan_audit VALUES 
    (:old.employee_id, :old.tool_no, :old.tool_out_date, :old.due_date, 'UPDATED', SYSDATE); 
    ELSIF DELETING THEN 
    INSERT INTO loan_audit VALUES 
    (:old.employee_id, :old.tool_no, :old.tool_out_date, :old.due_date, 'DELETED', SYSDATE); 
    END IF; 
END; 

Iを作成したトリガされているOracle SQL Developerの

create table loan_audit (
employee_id number not null, 
tool_no number not null, 
tool_out_date date not null, 
due_date date not null); 

に、このエラーが生じていますこれらのエラーが発生しています

Error(2,5): PL/SQL: SQL Statement ignored 
Error(2,17): PL/SQL: ORA-00913: too many values 
Error(5,5): PL/SQL: SQL Statement ignored 
Error(5,17): PL/SQL: ORA-00913: too many values 
Error(8,5): PL/SQL: SQL Statement ignored 
Error(8,17): PL/SQL: ORA-00913: too many values 

私は間違っていますか?私はこれを動作させようとしていましたが、このエラーが続いていました!すべての助けを前もってありがとう。どのinsertの列は、明示的な

+0

テーブルには4つの列がありますが、5つの値を挿入しようとしているため、Oracleは「あまりにも多くのvaues」と文句を言います。補足として、INSERT INTOテーブル(col1、col2、... colN)VALUES(val1、val2、... valN)に列名を明示的にリストする方法があります。列名を列挙しないでINSERTを使用することは、多くのエラーを引き起こす可能性があるため、悪い習慣とみなされます。 – krokodilko

+0

開発者の仕事の1つは、エラーをデバッグすることです。エラーメッセージは非常に明確で、「値が多すぎます」。それはあまりにも多くの価値があるという手がかりを与えるはずです。 – Eric

答えて

0

一覧:

IF INSERTING THEN 
    INSERT INTO loan_audit (employee_id, tool_no, tool_out_date, due_date) 
     VALUES (:new.tool_no, :new.tool_out_date, :new.due_date); 
    ELSIF UPDATING THEN 
    INSERT INTO loan_audit (employee_id, tool_no, tool_out_date, due_date) 
     VALUES ( :old.tool_no, :old.tool_out_date, :old.due_date); 
    ELSIF DELETING THEN 
    INSERT INTO loan_audit (employee_id, tool_no, tool_out_date, due_date) 
     VALUES ( :old.tool_no, :old.tool_out_date, :old.due_date); 
    END IF; 

ああ、見て。テーブルには4つの列がありますが、5を挿入しています.4つまたは5つを選択してテーブルを適切に宣言する必要があるかどうかを判断する必要があります。

employee_idもありません。 。 。

IF INSERTING THEN 
    INSERT INTO loan_audit (tool_no, tool_out_date, due_date) 
     VALUES (:new.tool_no, :new.tool_out_date, :new.due_date, 'INSERTED', SYSDATE); 
    ELSIF UPDATING THEN 
    INSERT INTO loan_audit (tool_no, tool_out_date, due_date) 
     VALUES ( :old.tool_no, :old.tool_out_date, :old.due_date, 'UPDATED', SYSDATE); 
    ELSIF DELETING THEN 
    INSERT INTO loan_audit (tool_no, tool_out_date, due_date) 
     VALUES ( :old.tool_no, :old.tool_out_date, :old.due_date, 'DELETED', SYSDATE); 
    END IF; 
関連する問題