電子書籍の厳選無料作品が豊富!

VB6 で oo4o を使って Oracle DB開発をしています。
Oralce 8.1.6 から Oracle10.2.0 にサーバを切り替えました。

bというテーブルがあって、
a c d
---- ------ -----
10 2 1
20 3 1
30 4 1
40 5 1
50 6 2
というデータがあったとします。

Select MAX(a) as a from b WHERE d=1

のようなSQLをVBから発行したときに

SQL*PLUSでは、
a
----
40

という結果が返ってくるのですが、VBでは、
a
---
10
20
30
40

のように複数行のレコードセットが帰ってきます。そのため、最大行を取得できません。Oracle8 のときは、SQL*PLUSと同じ結果が返ってきていました。ちなみに

Select MAX(a) as a from b WHERE d=1 GROUP BY d
~~~~~~~~~~
と、GROUP BYを付けると、ただしい(SQL_PLUSと同じ値)値が取得できます。

Oracle10.2.0の問題か、oo4oの問題かと考えています。

ちなみにoo4oのオブジェクトは、
CreateObject("OracleInProcServer.XOraSession")
で作成していて、クライアントのバージョンは 9.2.0.4.4です。

長文で失礼しますが、どなたかSQLを変更せずに解決する方法をご存じないでしょうか?

A 回答 (1件)

バグというか不具合なんだと思いますが、サポート契約ユーザなら、オラクルサポートに確認するのが良いでしょう。


サポート契約がないなら、手に入るもの・あるもので対応するしかないので、まずはサーバサイドか
クライアントサイドの問題か切り分けると良いかと。
(仮にオラクルサーバの問題だと、サポート契約ユーザ以外にはどうしようないという結果になります)

(1)現在の環境で、オラクルサーバに正しくSQL文が投入されているかを確認する。(セッショントレースとか見る)
(2)クライアントサイドの環境を変えてみる。例えば、古いクライアント環境(8i)の接続先をR10.2にして試すとか。

この回答への補足

ほぼ、解決しました!
セッショントレースを見たら、怪しいSQLがあって、それを検索したら以下のページが出てきました。

http://otn.oracle.co.jp/forum/message.jspa?messa …
http://support.oracle.co.jp/krown_external/oisc_ …
列名にエイリアスを使用して作成した Dynaset で正しい結果が得られない
という、oo4oのバグみたいです。
MAX(a) as a
と集計項目と、フィールド名が両方とも ”a”で同じだったためのようです。
サーバー側の設定では修正でき無そうなので、クライアント側のプログラムを確認する必要がありそうです。

でも、原因がわかったので少し安心しました。
ありがとうございます。

補足日時:2007/12/05 17:02
    • good
    • 0
この回答へのお礼

k_o_r_o_c_h_a_n さん、ありがとうございます。
役立つ情報ですね。

サポート契約については、多分無かったと思います。
(2)Oracle10.2.0のみがインストールされたPCで試しましたが、同じ結果でした。
(1)を試してみたいと思います。
ただ、今日職場にいけないので、明日試してみることになると思います。
また報告します。

お礼日時:2007/12/04 08:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!