2017-06-01 90 views
0

我正在遷移項目從Oracle到教育局的Postgres移動(包括更改Java代碼,使通過JDBC調用數據庫,使其問心無愧Oracle和Postgres的工作)。 EDB Postgres的附帶有確實的Oracle函數一些轉化爲在Postgres的各自的當量的內置PL /爪哇層。但是,這並不適用於所有情況。甲骨文教育局Postgres的Java的嵌入式SQL問題

我們正在使用Oracle 11g和教育局的Postgres 9.5

一些我們在Postgres迄今爲止所面臨的問題是:

org.postgresql.util.PSQLException: ERROR: date format not recognized (for format 'DD/MM/YYYY HH24:MI:SSxFF3) 
org.postgresql.util.PSQLException: Bad value for type long (getClob and setClob don't work with postgres text columns) 
org.postgresql.util.PSQLException: ERROR: syntax error at or near "NAME" (Any column alias named NAME fails during JDBC PreparedStatement execution) 
org.postgresql.util.PSQLException: ERROR: syntax error at or near "TEMPLATE" (Any column alias named TEMPLATE fails during JDBC PreparedStatement execution) 

編輯: Java代碼是直線前進。下面的代碼片段包括Java調用和表格的細節:

問題#1

create table table_name (TEMPLATE varchar2(10)) 

列的數據類型:

Oracle 
TEMPLATE varchar2(10) 

的Postgres

TEMPLATE character varying (10) (Postgres table was created by the EDB postgres migration toolkit) 
在下面的SQL

問題是與列別名模板作品,如果我更改別名說模板1,模板似乎是在Postgres的關鍵字。

sqlQuery = "SELECT A.TEMPLATE TEMPLATE FROM TABLE_NAME A"; 
preparedStatement = conn.prepareStatement(sqlQuery); 
resultSet = preparedStatement.executeQuery(); 
//Works in Oracle, ERROR in postgres: syntax error at or near "TEMPLATE" 

問題#2

create table table_name1 (date_col TIMESTAMP(6)) 

列的數據類型:

Oracle 
Date_Col TIMESTAMP(6) 

的Postgres

Date_Col timestamp without time zone (Postgres table was created by the EDB postgres migration toolkit) 

sqlQuery = "Select TO_CHAR(DATE_COL,'DD/MM/YYYY HH24:MI:SSxFF3') from TABLE_NAME1"; 
preparedStatement = conn.prepareStatement(sqlQuery); 
resultSet = preparedStatement.executeQuery(); 
//Works in Oracle, ERROR in postgres: date format not recognized 

雖然我們對上面列出的每個問題都有具體的解決方案,但基於從Oracle遷移到Postgres的經驗來處理Java差異的建議/建議將會很有幫助。我們希望轉向適用於Postgres和Oracle(理想情況下!)的Java代碼,並且希望避免if-else代碼調用Oracle與Postgres特定的SQL。

+0

編輯我的問題,包括Java代碼。 –

+0

什麼數據類型是'date_col'?什麼是來自第一個查詢的'table_name'的'create table'語句? –

+0

在問題中增加了更多細節。謝謝。 –

回答

1

一個可能的解決方案,我發現這個名字,template關鍵字的錯誤是引用列別名,Postgres的那樣不把NAME,模板作爲關鍵字。

SELECT A.TEMPLATE TEMPLATE FROM TABLE_NAME A 
org.postgresql.util.PSQLException: ERROR: syntax error at or near "TEMPLATE" (Any column alias named TEMPLATE fails during JDBC PreparedStatement execution) 

將其更改爲:

SELECT A.TEMPLATE "TEMPLATE" FROM TABLE_NAME A