我无法通过 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 子句。无论如何,对此的任何帮助都将受到高度赞赏。