0

基本的に次のような長い SQL ステートメントがあります。

with a as (select * from t1),  
  b as (select * from a, t2 where a.id=t2.id)  
select * from b

このステートメントは、TOAD アプリケーションで完全に正常に実行されます。しかし、上記を文字列変数に詰め込んで ASP で実行しようとすると、次のようになります。

set rs = objConn.execute(strSQL)

次のエラーが表示されます:
Microsoft OLE DB Provider for ODBC Drivers error '80040e37'
[Microsoft][ODBC driver for Oracle][Oracle]ORA-00942: テーブルまたはビューが存在しません
/Application/xxxxx/yyyyy/myfilename.asp, 168行目

行 168 は set rs = objConn.execute(strSQL) 行です。

これらの同じテーブルを使用して他のいくつかのクエリを実行し、 set rs = objConn.execute(strSQL) 行を使用して問題なくオンラインに投稿しました。私が判断できる唯一のことは、この SQL クエリと異なるのは、サブクエリの因数分解です。

次のような独自のselectステートメントでクエリ全体をラップしようとしました:

select * from (with a as blah blah... entire original query)

しかし、それでも同じエラーがスローされます。セットを使用しないことはできますか

rs = objConn.execute(strSQL) 

サブクエリファクタリングと組み合わせて?それはサポートされていませんか?それとも何らかの回避策がありますか?それとも、まったく別のものでしょうか?

ありがとう。

4

2 に答える 2

1

私は愚かだ。select * from () をブロック全体にラップすると、実際に機能します。実際には接続されていない別のスキーマにある古い (ほとんど使用されなくなった) テーブルに参加しようとしていたことを忘れたため、エラーがスローされていました。クエリを書き直して、必要なデータの一部をそのあいまいなテーブルから、接続されていて必要な同じデータが含まれている別のテーブルにプルすることで、問題を解決しました。

于 2014-05-23T13:26:10.313 に答える
0

Microsoft OLE DB Provider for ODBC Driver は非常に古いものです。Oracle 7 が登場したときに作成され、それ以来実際には更新されていません。WITH 句は、Oracle 9.2 で追加されました。

あなたのselect * from ()回避策が機能しないことに驚いています。それはまさに私たちが使用しているものであり、私たちにとってはうまく機能しています.

もう 1 つの解決策はOracle Provider for OLE DB、Microsoft ドライバーの代わりに を使用することです。これは Oracle によって提供され、すべての Oracle リリースで更新されます。

于 2014-05-22T19:52:17.460 に答える