我正在遷移項目從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。
編輯我的問題,包括Java代碼。 –
什麼數據類型是'date_col'?什麼是來自第一個查詢的'table_name'的'create table'語句? –
在問題中增加了更多細節。謝謝。 –