[解決済み] オラクル ユーザーデータでConnect By Loop
質問内容
Oracleでループが発生する場合があることは理解しています。理論的には、あるレコードが他のノードの親であり、同時にそのノードの子である場合、ループに入る可能性があると言われています。
しかし、このクエリがなぜループしているのかがつかめません。
SELECT Empno, Ename, Job
FROM Emp
START WITH Empno = 7839
CONNECT BY PRIOR
Job='PRESIDENT'
このデータがどのようにループになるのか、どなたか教えてください。 CONNECT_BY_ISCYCLEを確認したところ、ループしているレコードはKING(President)であることがわかりました。 しかし、私はまだそれが可能であることが理解できない、KINGは大統領であり、私はそれがテーブル内の任意のレコードの両方の子と親になっている方法を参照してくださいです。
なぜこれがエラーになるのか、ループはどこにあるのか、説明してください。
よろしくお願いします。
参考までに、このテーブルはOracleのSCOTTユーザーのデフォルトのEMPテーブルです。
解決方法は?
<ブロッククオート親行の子を見つけるために、OracleはPRIORを評価します。 親行に対する CONNECT BY 条件の式と、親行に対する その他の式は、テーブル内の各行に対して使用されます。この式が適用される行は 条件が真である場合、その親の子である。CONNECT BY 条件には、さらに行をフィルタリングするための他の条件を含めることができます。 はクエリによって選択されます。
CONNECT BY 条件が階層内のループを引き起こす場合、それは オラクルはエラーを返します。ループが発生するのは、1つの行が親であると同時に (祖父母または直系の先祖)であり、かつ子(または孫または直系の先祖)である。 別の行の直接の子孫)。
START WITH を満たし、かつ Job = 'PRESIDENT' を持つ行がない場合、ループは発生しません(Oracle は START WITH 行のみを取得します)。
テーブル内に START WITH を満たし、Job = 'PRESIDENT' を持つ行がある場合、どのような場合でもループが発生するためです。
1. Oracle は START WITH を満たすすべての行 (ルート行) を見つけます。
2. p.1 の各行について、Oracle はテーブル全体をスキャンして、子孫を探します。すべての行(p.1からの行を含む)がCONNECT BYの条件を満たす(先行ジョブ=「PRESIDENT」が常に真であるため)。
3. 明らかに ...
関連
-
Oracle Temporary Tablespace SQLステートメントの実装
-
オラクル・ラックのケーススタディ
-
オラクルのTO_DATEの使い方解説
-
[解決済み] ORA-01882: タイムゾーン領域が見つかりません。
-
[解決済み] ORA-00980 PLSQL で同義語の翻訳が有効でなくなった。
-
[解決済み] ORA-01799: 列がサブクエリに外部結合されていない可能性があります。
-
[解決済み] PLS-907でライブラリユニットを読み込めない
-
[解決済み] 外部キーの追加エラー。ORA-02298: 検証できません - 親キーが見つかりませんでした
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Oracle Sqlplusコマンドログイン複数方法ケーススタディ
-
Oracleの表領域と権限を徹底解説
-
Oracle 11gのダウンロード、インストール、グラフィックチュートリアルを使用します。
-
オラクルのTO_DATEの使い方解説
-
C#からORACLEへの接続が乱れたコードの問題解決法
-
[解決済み] ORA-00900: 無効な SQL 文 - Oracle 10g のプロシージャを実行するとき
-
[解決済み] ORA-29913: Oracle に csv を挿入する際の ODCIEXTTABLEOPEN コールアウトの実行でエラーが発生しました。
-
[解決済み] ORA-12545: ターゲットホストまたはオブジェクトが Mac に存在しないため、接続に失敗しました - SQLPLUS
-
[解決済み] ORA-00980 PLSQL で同義語の翻訳が有効でなくなった。
-
[解決済み] PLS-00382: 式が不正です。