1

我可以在 SQL Plus 中运行以下语句

CREATE OR REPLACE TRIGGER TEST.RECORD_TABLE.BIR
BEFORE INSERT ON TEST.CURRENT_VACANCIES
FOR EACH ROW WHEN (new.VACANCY_ID IS NULL)
BEGIN 
   SELECT TEST.CURRENT_VACANCIES_SEQ.NEXTVAL INTO :new.VACANCY_ID FROM dual; 
END;

它完美无缺。

但是,当我尝试从 Java 应用程序中的准备好的语句中调用它时,我收到以下错误

SQL 异常;java.sql.SQLException:索引处缺少 IN 或 OUT 参数:: 1

有人有什么想法吗?

谢谢

4

1 回答 1

5

不要使用 PreparedStatement 接口来创建引用 a:NEW 或 :OLD 列的触发器。请改用语句。使用 PreparedStatement 将导致执行失败并显示消息 java.sql.SQLException: Missing IN or OUT parameter at index:: 1。

见:http ://docs.oracle.com/cd/E11882_01/java.112/e16548/oraint.htm#CHDIIDBE

利用:

session.doWork(new Work() {
    @Override
    public void execute(Connection connection) throws SQLException {
        //connection, finally!
    }
});

来自:如何从休眠会话中获取 jdbc 连接?

于 2012-08-24T06:31:54.300 回答