2

以下のSQLトリガーは、Oracle SQL Plusで正しく実行されました

 CREATE OR REPLACE TRIGGER test_trigger 
 BEFORE INSERT ON RESULTS
 REFERENCING NEW AS NEW
 FOR EACH ROW
 BEGIN
 SELECT Pd_seq.nextval INTO :NEW.PT_ID FROM dual;
 END;
 /

しかし、同じコードを Java で実装すると、次のエラーがスローされました。

コード:

 ResultSet rs1 = stmt.executeQuery("CREATE OR REPLACE TRIGGER test_trigger123 "+
                "BEFORE INSERT ON RESULTS"+
                "REFERENCING NEW AS NEW"+
                "FOR EACH ROW"+
                "BEGIN"+
                "SELECT Pd_seq.nextval INTO :NEW.PT_ID FROM dual;"+
                "END;"+
                "\n/");

Eclipse のエラー メッセージ:

SQL Exception:
State  : 42000
Message: ORA-04079: invalid trigger specification

Error  : 4079

よろしくお願いします。エラーの原因は何ですか?

4

2 に答える 2

2

各行の後に空白または \n を挿入する必要があります。例:

ResultSet rs1 = stmt.executeQuery("CREATE OR REPLACE TRIGGER test_trigger123\n"+
                "BEFORE INSERT ON RESULTS\n"+
                "REFERENCING NEW AS NEW\n"+
                "FOR EACH ROW\n"+
                "BEGIN\n"+
                "SELECT Pd_seq.nextval INTO :NEW.PT_ID FROM dual;\n"+
                "END;\n"+
                "\n/");
于 2013-07-10T07:04:59.580 に答える
1

今のように実行しようとすると、次のようになります。

stmt.executeQuery("CREATE OR REPLACE TRIGGER test_trigger123 BEFORE INSERT ON RESULTSREFERENCING NEW AS NEWFOR EACH ROWBEGINSELECT Pd_seq.nextval INTO :NEW.PT_ID FROM dual;END;\n/");

そのため、行の後ろにスペースを追加する必要があります。

ResultSet rs1 = stmt.executeQuery("CREATE OR REPLACE TRIGGER test_trigger123 "+
            "BEFORE INSERT ON RESULTS "+
            "REFERENCING NEW AS NEW "+
            "FOR EACH ROW "+
            "BEGIN "+
            "SELECT Pd_seq.nextval INTO :NEW.PT_ID FROM dual; "+
            "END; "+
            "\n/");
于 2013-07-10T07:08:08.313 に答える