[英]How to execute this Oracle statement on JDBC
我在使用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 :
DBMS_UTILITY.EXEC_DDL_STATEMENT('create table t1 (id number)');
實際上,這比接受的答案中建議的解決方法更安全,因為它不允許執行DML,因此可以防止SQL注入
使用oracle.jdbc.OraclePreparedStatement
OraclePreparedStatement statement = (OraclePreparedStatement)connection.prepareStatement( sql );
由於這是Oracle特有的,因此常規的PrepareStatement
無濟於事。 Oracle為此提供了一個包裝器,同時還具有其他功能。
類似地,Oracle提供OracleCallableStatement
類似CallableStatement
解決方法:(當必須使用PreparedStatement時-被濫用的風險
CREATE PROCEDURE EXECUTE_MY_DDL(INSTRING VARCHAR2)
AS
BEGIN
EXECUTE IMMEDIATE INSTRING;
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.