我尝试使用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子句。无论如何,非常感谢任何关于此问题的帮助。