source

ADODB 및 Oracle로 "xas(...)"를 수행할 수 없는 이유는 무엇입니까?

lovecheck 2023. 10. 24. 21:25
반응형

ADODB 및 Oracle로 "xas(...)"를 수행할 수 없는 이유는 무엇입니까?

저는 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-Time 오류 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는 쿼리를 오라클 인스턴스로 전달하기 전에 구문 분석을 수행하고 with 을 이해하지 못하는 것 같습니다.어쨌든, 이에 대한 어떤 도움이라도 대단히 감사드립니다.

좋아요, 정말로 ADODB는 쿼리문이 실제로 시작되기를 기대하는 것 같습니다.select. 따라서 문제에 대한 해결책은 문장을 a에 포함하는 것일 수 있습니다.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

위의 방법은 저에게 효과가 없었습니다.

WITH 키워드 앞에 ";"를 추가하면 문제가 해결됩니다.

Dim sql As String sql = ";with(듀얼에서 'foo' x 선택) w에서 x 선택"

rs.Open sql, cn

언급URL : https://stackoverflow.com/questions/2316886/why-cant-i-do-a-with-x-as-with-adodb-and-oracle

반응형