みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Oracle 10.2.0 でMAX集計がおかしい!?

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を変更せずに解決する方法をご存じないでしょうか?

投稿日時 - 2007-12-03 19:49:48

QNo.3568301

暇なときに回答ください

質問者が選んだベストアンサー

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

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

投稿日時 - 2007-12-04 03:26:48

補足

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

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

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

投稿日時 - 2007-12-05 17:02:20

お礼

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

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

投稿日時 - 2007-12-04 08:34:08

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問