Oracle到EDB Postgres Java嵌入了SQL问题



我正在研究一个迁移项目,以从Oracle转移到EDB Postgres(包括更改通过JDBC进行DB调用的Java代码,以使其与Oracle和Postgres一起使用(。EDB Postgres配备了一个内置的PL/Java层,该层将Oracle函数转换为Postgres中各自的等效物。但是,这在所有情况下都没有起作用。

我们正在使用Oracle 11G和EDB 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

尽管我们对上面列出的每个问题都有特定的解决方案,但根据从甲骨文到Postgres的经验来处理Java的此类差异的建议/建议将是有帮助的。我们希望转到适用于Postgres和Oracle(理想情况下!(的Java代码,并希望避免使用IF-Else代码来调用Oracle vs Postgres特定的SQL。

我为名称找到的一种可能的解决方案,模板关键字错误是引用列别名,这样,Postgres不将名称视为template作为关键字。

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

最新更新