【问题标题】:Oracle to SQL Server ODBC link - Invalid identifier when using WHERE clauseOracle 到 SQL Server ODBC 链接 - 使用 WHERE 子句时标识符无效
【发布时间】:2018-11-15 23:19:29
【问题描述】:

我需要使用 ODBC 数据库链接从 Oracle 中的 SQL Server 查询数据。 我已经在 Oracle 中创建了必要的配置,以允许我访问 SQL Server 数据库并查询数据。

当我这样做时:

select * from table@ODBC_LINK

我返回所有行。

当我这样做时:

select * from table@ODBC_LINK WHERE [Field] = 'Some Value'

我得到一个

ORA-000904 错误; “字段”标识符无效。

字段名称是 SQL 源数据库/表中的有效字段,但无论我做什么,我都无法使用 WHERE 子句,因为这总是给我同样的 ORA 错误。

使用 Oracle XE 11g 和 SQL Server 2012。

是什么导致了我的问题?

【问题讨论】:

  • Oracle 不像 SQL Server 那样使用方括号来转义名称。如果您的名称可能包含特殊字符,请忽略它们,或使用双引号。
  • 嗯,Oracle XE 11g SQL = SQL Server 2012 ?不!
  • @der_roedie - 在此处标记正确的数据库。
  • 标签已编辑
  • @der_roedie 。 . .无需编辑标签。评论者显然没有阅读该问题,因为您使用的是两种不同的数据库产品。

标签: sql sql-server oracle oracle11g database-link


【解决方案1】:

您的查询正在 Oracle 而不是 SQL Server 中运行。该表来自 SQL Server,但不是解析器。

所以,首先尝试不使用转义字符:

select * from table@ODBC_LINK WHERE Field = 'Some Value'

如果您需要对名称进行转义,请使用 Oracle 转义字符:

select * from table@ODBC_LINK WHERE "Field" = 'Some Value'

【讨论】:

  • 嗨,戈登,第一个查询结果为 ORA-000904。第二个查询给出: ORA-02070: 数据库 QACOMMENTS 在此上下文中不支持某些功能 02070. 00000 - “数据库 %s%s 在此上下文中不支持 %s” *原因:远程数据库不支持在使用它的上下文中命名的能力。 *行动:简化 SQL 语句。行错误:7 列:53
  • 抱歉格式化..... SO-n00b 用于发布问题和 cmets :)
  • @der_roedie 。 . .查询在远程服务器上本地运行时是否有效?
  • 是的,没有问题。我在 Oracle XE 主机上有另一个数据库链接,它使用 ODBC 连接到同一个 SQL 服务器上的不同实例,该服务器与 select-queries 和 WHERE 子句配合良好......这就是让我陷入困境的原因。
  • @der_roedie 。 . .如果你使用子查询呢? select * from (select . . . ) x where field = . . . .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2023-03-15
相关资源
最近更新 更多