gpt4 book ai didi

vba - 为什么我不能使用 ADODB 和 Oracle 执行 "with x as (...)"?

转载 作者:行者123 更新时间:2023-12-02 23:06:29 24 4
gpt4 key购买 nike

我无法通过 ADODB 和 Oracle 执行带有with 子句的 SQL 查询。

也就是说,以下代码片段有效:

Dim cn As ADODB.connection
Set cn = ....

Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset

rs.Open "select 'foo' x from dual", cn


Do While Not rs.eof
...
rs.MoveNext
Loop

但是,以下方法不起作用 - 它会生成运行时错误 3704:关闭对象时不允许操作。

Dim cn As ADODB.connection
Set cn = ....

Dim rs As ADODB.recordSet
Set rs = New ADODB.Recordset

rs.Open "with w as (select 'foo' x from dual) select x from w", cn

Do While Not rs.eof
...
rs.MoveNext
Loop

显然,这是对实际问题的精简演示,其中包括更复杂的查询。

在我看来,ADODB 在将查询传递给 Oracle 实例之前会对其进行解析,并且不理解 with 子句。无论如何,对此的任何帮助都是高度的赞赏。

最佳答案

好吧,看起来 ADODB 确实希望查询语句实际上以 select 开头。因此,解决该问题的方法可能是将语句包含在 select * from ( .... ) 中,如下所示:

Dim sql As String
sql = "with w as (select 'foo' x from dual) select x from w"

' enclose the statement:
sql = "select * from (" & sql & ")"

rs.Open sql, cn

关于vba - 为什么我不能使用 ADODB 和 Oracle 执行 "with x as (...)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2316886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com