在java app中创建触发器

时间:2012-06-21 09:29:35

标签: sql oracle

我可以在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 App中的预准备语句调用它时,我收到以下错误

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

有人有任何想法吗?

由于

1 个答案:

答案 0 :(得分:5)

  

不要使用PreparedStatement接口来创建引用:NEW或:OLD列的触发器。请改用Statement。使用PreparedStatement将导致执行失败,并显示消息java.sql.SQLException:在index :: 1处缺少IN或OUT参数。

请参阅: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!
    }
});

来自:How to get jdbc connection from hibernate session?