我在使用 JDBC 准备好的语句执行以下操作时遇到问题:
CREATE OR REPLACE TRIGGER Time_trg BEFORE INSERT ON Time FOR EACH ROW
BEGIN
SELECT Time_seq.NEXTVAL INTO :new.id FROM dual;
END;
代码:
try {
PreparedStatement statement = connection.prepareStatement( sql );
preparedStatement.executeUpdate();
} finally {
statement.close();
}
我收到此错误:
java.sql.SQLException: Missing IN or OUT parameter at index:: 1
我正在开发一个与数据库无关的解决方案,所以我需要一些可移植的东西。那么oracle的问题是什么?
不需要编写我们自己的存储过程来执行此操作。 Oracle提供了一个内置的存储过程我们可以使用:DBMS_UTILITY.EXEC_DDL_STATEMENT https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_util.htm#ARPLS73238:
DBMS_UTILITY.EXEC_DDL_STATEMENT('create table t1 (id number)');
事实上这比已接受答案中建议的解决方法 https://stackoverflow.com/a/26080867/146325因为它不允许执行 DML,因此可以防止 SQL 注入
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)