我可以在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
有人有任何想法吗?
由于
答案 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!
}
});