使用 WITH 访问对 Oracle 的直通查询

Posted

技术标签:

【中文标题】使用 WITH 访问对 Oracle 的直通查询【英文标题】:Access pass-through query to Oracle using WITH 【发布时间】:2013-11-28 14:32:53 【问题描述】:

我尝试在 TOAD 中运行它并且 sqldeveloper 没问题,但是当我在 Access 中使用直通查询运行时出现错误: "带有returnsRecords 属性的直通查询"

代码

With T1 as (select * from baasa), 
T2 as (select * from lalala), 
T4 as  (select * from babab)
select distinct T1.C11 as something, T4.C5 as somewhere, T2.C2 as what
from T1,T2,T4
Where T1.C11=T4.C5 and T1.C10=T2.C2

或在小提琴中:http://sqlfiddle.com/#!4/84c06/2 谁能帮我?

【问题讨论】:

我承认我已经很长时间没有使用 Oracle问题。我确定 Access 传递查询可以在 SQL Server 上使用公用表表达式,所以我不明白为什么您也不应该在 Oracle 上使用它们。只是为了确认一下:您的查询确实返回记录,并且传递查询的Returns Records 属性设置为Yes,对吗? 当我使用 sqldeveloper 时它返回了记录,但是当我使用访问时我得到了这个错误:“带有返回记录属性的传递查询”。我可以知道如何将其设置为是或否吗?谢谢 您所说的问题毫无意义。您的 SQL 因“ORA-00928:缺少 SELECT 关键字”而失败。检查 SQL Fiddle here 进行验证。此外,“带有返回记录属性的直通查询”不是有效的访问错误消息。如果您不告诉我们您真正在做什么,我们将无法帮助您。 @GordThompson 我在那里添加了sqlfiddle.com/#!4/84c06/2,很抱歉造成混淆。 @a_horse_with_no_name 它的 TOAD 哈哈.. 【参考方案1】:

您的(修改后的)查询在 SQL Server 2008 R2 中运行良好,并且作为 Access 直通查询也运行良好。验证查询的Returns Records 属性是否设置为Yes(如下所示)并尝试再次运行直通查询。正如我在对您的问题的最初评论中所说,如果它适用于 SQL Server,那么我看不出它为什么不适用于 Oracle。

【讨论】:

@Xarxas 您是否单击了功能区栏“查询类型”部分中的“传递”按钮? (再看一下上面的屏幕截图。它是以黄色突出显示的按钮。) 在 ODBC 连接 Str 我应该填写什么(我很抱歉有很多愚蠢的问题) @Xarxas 看看微软文章here。 还有什么奇怪的是,当我尝试将表导入本地数据库时,它工作正常。但是当我尝试通过 ODBC 连接到 oracle 时它没有工作...... :( 它现在可以工作了:) 我改变了它,删除了“with”,所以代码是:select * from (select * from table1) where something。谢谢!【参考方案2】:

我很确定您的查询有语法错误:WHERE 子句之前没有 SELECT 或 FROM 子句...

【讨论】:

对不起,我在那里添加了。

以上是关于使用 WITH 访问对 Oracle 的直通查询的主要内容,如果未能解决你的问题,请参考以下文章

访问直通无 DSN 的 Oracle 查询

刷新访问直通查询

MS Access 对 Oracle VIA ODBC 的直通查询

在 Oracle 中使用 connect by 在 with 子句中访问子查询中的父别名

使用更改的 WHERE 子句访问直通查询

运行直通查询,而无需每次都提示输入服务器凭据