![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
お世話になります。
10gR2データベースで動かしていたPL/SQLプログラム内の、とあるSELECT文が、11gR2環境ではエラーが発生してしまい、動きません。
そのSELECT文をそのまま掲載するのは難がありますので、初期サンプルDBでも動くSELECT文に直したものを掲載させて頂きます。
(本物のSELECT文と同じ構文であることに重点を置いているため、掲載するSELECT文の意味不明さは無視して頂ければ幸いです)
-----------
10g環境:Database10g Enterprise Edition 10.2.0.1.0
11g環境:Database11g Enterprise Edition 11.1.0.6.0
10g:まったく問題なく動作する
11g:エラー(下記エラーメッセージ)
行2でエラーが発生しました。
ORA-03113:通信チャネルでend-of-fileが検出されました。
SELECT文:
SELECT A.LAST_NAME
FROM (EMPLOYEES A FULL OUTER JOIN DEPARTMENTS B
ON (A.DEPARTMENT_ID = B.DEPARTMENT_ID
AND ((A.SALARY >11000 AND COMMISSION_PCT IS NULL)
OR B.MANAGER_ID = 100)));
-----------
エラー番号をインターネットで調べるとオラクルサポートに連絡しなければならないようもののようですが・・・接続や通信関係ではなく、オプティマイザや実行計画に問題がある(仕様変更?)のではないかと思います。
結合内の追加条件を外に出し、SELECT文本体のWHERE句に移動すると動きますが、この現象の原因をご存知の方、ご教示いただければ幸いです。
No.1ベストアンサー
- 回答日時:
こちらでも現象を確認しました。
こちらの環境は、11.1.0.7.0です。
どうもSQLの解析に失敗して回線切断しているみたいですね。
今のままで解決して欲しいなら、オラクルサポートに連絡が妥当だと思います。
解決方法もご存知のようなので今さらなんですが、やはりテーブルの結合条件と抽出条件は分けて書かれた方がよいと思います。
・結合条件
A.DEPARTMENT_ID = B.DEPARTMENT_ID
・抽出条件
((A.SALARY >11000 AND COMMISSION_PCT IS NULL)
OR B.MANAGER_ID = 100)
何の解決にもなってませんが、頑張ってください。
nas02さん、早速のご回答ありがとうございます。
そうですね・・・nas02さんのおっしゃるとおり、オラクルのサポートに相談するのが良さそうですね。もしかすると、これと同じ原因で、他のSQL文でも今後、妙なエラーが出る可能性もあると考えると、根本解決したほうが無難という気もします。
ただ解決方法と考えている、「追加条件をWHERE句に移動」をそのままやると、返ってくる結果が違うのです・・・書き方が間違っているのでしょうか。もう少し試行錯誤する必要がありそうです。
アドバイスありがとうございました。
No.2
- 回答日時:
エラーメッセージを見る限り、SQL解析・実行で固まって(?)しまって、回答を待ちきれなくてネットワーク側の機器等でタイムアウトが発生し、セッションを強制的に切られているようにも思えます。
nas02さんのように実環境で検証している訳ではないのであてずっぽうですが、実行計画・コストの差を比較すること、ネットワーク機器・ミドルウェア設定で最短のタイムアウト時間との関連を調査される事をオススメします。
条件の書き方もありますが、SQLの形を見る限り、オプティマイザがそんなに悪化するようなことは無いと思います。
なので仰るとおり、私も索引やパーティション等、リソース環境に原因があるように思います。が、もし切断している原因がネットワーク側に無ければサポート対応か、SQLの形を変えて回避するしか無さそうですね。
lond_nagさん、ご回答ありがとうございます。
ネットワークには問題ないようです。複数の環境(ローカル/リモートなど)で試しましたが同じ現象が起こりました。とりあえずSQLの形を変えて急場をしのぎたいところです。サポートにも連絡してみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PL/SQL PLS-00103エラーについて
-
PL/SQLのコンパイルエラーにつ...
-
CASE文のエラーについて
-
「ORA-00907: 右カッコがありま...
-
PCC-S-02201エラーの対処を教え...
-
はじめまして!
-
SQLLOADER
-
ORA-06502のエラー
-
dmpファイルのインポート時にで...
-
Oracle9 union使用時の結合制限...
-
ORA-12571パケット書き込みエラ...
-
エラー「単一グループのグルー...
-
ACCESSでパススルークエリにパ...
-
PL/SQLでPLS-00201のエラー
-
WHERE文の中で除算
-
ORACLEのUPDATE処理
-
データベースのカラムの型がCHA...
-
TO_DATE関数について
-
独自 TYPE 定義した表への IMPORT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQLのコンパイルエラーにつ...
-
「ORA-00907: 右カッコがありま...
-
PL/SQL PLS-00103エラーについて
-
はじめまして!
-
シェルスクリプトでオラクルの...
-
PCC-S-02201エラーの対処を教え...
-
ストアドファンクションの実行
-
HAVING句でのBETWEEN演算子
-
ORA-01843: 指定した月が無効で...
-
ORA-06502のエラー
-
DATABSE LINKについて
-
PL/SQLでPLS-00201のエラー
-
sqlのエラーハンドリングについ...
-
PL/SQLによるCREATE TABLE後のI...
-
ACCESSでパススルークエリにパ...
-
SQLLOADER
-
PL-SQLでORA-01013エラー
-
無効なSQL文の具体例を教えてく...
おすすめ情報