簡體   English   中英

如何在JDBC上執行此Oracle語句

[英]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;

參考JavaDoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM