JDBC使用INSERT RETURN語句報錯ORA-439
在給客戶開發人員講解LOB列的訪問方式後,開發人員嘗試在JDBC中使用包含RETURN的INSERT語句,但是出現了ORA-439錯誤。
檢查後發現客戶的程式使用的還是PreparedStatement語句,而RETURNING語句,則是Oracle擴充套件的SQL語法,因此在宣告語句的時候必須使用OraclePreparedStatement方式進行宣告。
除了修改SQL語句外,使用OraclePreparedStatement宣告語句變數外,還需要註冊輸出引數,類似的程式碼如下:
OraclePreparedStatement sqlstmt =
(OraclePreparedStatement)conn.prepareStatement
("insert into t_lob values (?, ?, empty_clob()) returning contents into
?");
sqlstmt.setInt(1, 1);
sqlstmt.setString(2, "a");
sqlstmt.registerReturnParameter(3, OracleTypes.CLOB);
sqlstat.executeUpdate();
ResultSet resset = sqlstmt.getReturnResultSet();
if (resset.next())
{
CLOB contents = (CLOB)resset.getClob(2);
...
}
不過即使開發人員宣告瞭OraclePreparedStatement語句,仍然找不到registerReturnParameter過程。
當前的資料庫的版本是11.2.0.2,沒有道理不支援RETURN語句,何況JDBC的RETURNING語句是從10.2的JDBC就引入新特性。
查詢了一下當前客戶端JDBC的驅動版本,發現居然還是9.2的版本,這就難怪使用RETURN語句的時候,會出現ORA-439的錯誤了。
很多時候資料庫的版本已經升級到很高的版本,但是應用程式使用的版本或驅動沒有進行升級,同樣很多新特性無法使用。而且一般而言,推薦客戶端驅動版本和所連線資料庫的版本保持一致,這樣出現BUG的可能性最小。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-713913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php中return語句的使用PHP
- JavaScript return 語句JavaScript
- 教你使用SQLite-insert語句SQLite
- SQLite Insert 語句SQLite
- MySQL INSERT IGNORE語句的使用MySql
- mysql insert語句錯誤問題解決MySql
- JavaScript return語句簡單介紹JavaScript
- 使用JDBC時,加速批量insertJDBC
- Oracle 使用一條insert語句完成多表插入Oracle
- 【SQL】使用一條INSERT語句完成多表插入SQL
- 【SQL】9 SQL INSERT INTO 語句SQL
- Sql Server系列:Insert語句SQLServer
- JDBC預編譯語句JDBC編譯
- SQLite中特殊的INSERT語句SQLite
- finally語句在return執行之後,return返回之前執行
- javascript return語句只能用於函式中JavaScript函式
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- SQLTest系列之INSERT語句測試SQL
- jdbc使用call呼叫儲存過程報錯JDBC儲存過程
- oracle-資料庫- insert 插入語句Oracle資料庫
- SQLite語句(二):INSERT DELETE UPDATE SELECTSQLitedelete
- 快速執行大量 insert 語句的方法
- 用merge 語句代替 insert 和deletedelete
- Can't use function return value in write context 使用empty遇到報錯FunctionContext
- 論減少程式碼中return語句的騷操作
- Android switch語句報錯Constant expression requiredAndroidExpressUI
- PostgreSQL的insert語句執行過程分析SQL
- 一個insert插入語句很慢的優化優化
- oracle dblink實現insert語句的同步Oracle
- LINQ to SQL語句之Insert/Update/Delete操作SQLdelete
- MySQL 5.5 INSERT ... ON DUPLICATE KEY UPDATE語句說明MySql
- DBeaver如何生成select,update,delete,insert語句delete
- 生成某一使用者下所有表資料的insert語句
- MySQL JDBC 出現多個 SHOW VARIABLES 語句。MySqlJDBC
- python:return之後的語句還會執行嗎Python
- sql語句錯誤SQL
- JDBC批量Insert深度優化JDBC優化
- 【ASK_ORACLE】使用insert語句將普通錶轉換成分割槽表Oracle