首页 > 解决方案 > 避免 ORA-00904 - 在 java 中执行 sql 查询时出现无效标识符错误,因为该列可能会或可能不会在数据库中预设

问题描述

我正在尝试编写java代码以将数据从oracle database其他数据库迁移。我的用例是不同的客户端有不同的代码版本,因此数据库列可能会有所不同。更高版本的客户端有额外的列。例如:具有新版本的客户端,如COL99表中所示SAMPLE_TABLE

在编写迁移代码时,如果我尝试选择COL99from SAMPLE_TABLE,它将适用于新客户端。但是对于旧版本的客户,代码失败了

ORA-00904 无效的标识符错误。

有没有办法在sql查询或java代码中处理,如果数据库表中不存在该列,只需忽略并且不返回值而不是抛出异常。

标签: javasqloracleora-00904

解决方案


您应该首先检查COL99您当前的数据库连接是否存在。对于 Oracle,您可以使用如下查询:

SELECT
  COL.COLUMN_ID,
  COL.OWNER AS SCHEMA_NAME,
  COL.TABLE_NAME,
  COL.COLUMN_NAME
FROM
  SYS.ALL_TAB_COLUMNS COL
  INNER JOIN
  SYS.ALL_TABLES T 
  ON COL.OWNER = T.OWNER
     AND
     COL.TABLE_NAME = T.TABLE_NAME
WHERE
  COL.OWNER = 'SCHEMA'
  AND
  COL.TABLE_NAME = 'SAMPLE_TABLE'
  AND
  COL.COLUMN_NAME = 'COL99'

然后,您可以使用或不使用COL99.


推荐阅读