我无法通过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
Run Code Online (Sandbox Code Playgroud)
但是,以下操作无效 - 它会导致运行时错误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
Run Code Online (Sandbox Code Playgroud)
显然,这是一个真实问题的精简版演示,它包含一个更复杂的查询.
在我看来,ADODB在将查询传递给Oracle实例之前解析查询,并且不理解with子句.无论如何,对此的任何帮助都非常感谢.
Ren*_*ger 17
好吧,看起来好像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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2890 次 |
最近记录: |