6

いくつかの Oracle SQL クエリを変換して、(理論的には) 任意の SQL データベースで動作するようにしようとしています。一部のクエリは本質的に階層的であり、CONNECT BY を使用して記述されています。

Oracle の START WITH...CONNECT BY 構文に代わる標準的な SQL はありますか? または、階層クエリを変換するために従うべき推奨プロセスはありますか?

4

2 に答える 2

7

Oracle 11gR2 では、Common Table Expressions での再帰をサポートしています (ほとんどの Oracle 関係者は、サブクエリ ファクタリング、つまりWITH句として知っているものです)。これは ANSI の方法であるため、より移植性が高いはずです。

Tom Kyte は、 2009 年 11 月号の Oracle マガジンで Recursive Subquery Factoring について書いています。

于 2009-11-03T17:56:44.703 に答える
2

Recursive Subquery Factoring をサポートしていないデータベースに対して階層クエリが必要な場合 ( APC の回答を参照)、非常にローテクな代替手段の 1 つは、階層を別のキーにエンコードすることです。もちろん、これは、テーブルの更新プロセスを制御し、親の更新に続いてキーを書き換えることができる場合にのみ機能します。

例えば:

FLAT_HIER_ID  NODE_ID   PARENT_NODE_ID
~N1           N1
~N1~N2        N2        N1
~N1~N2~N3     N3        N2
~N1~N2~N4     N4        N2

あまりエレガントではありませんが、クエリのルートを提供します。

もう 1 つの (おそらくより良い) オプションは、" Nested Set Model " メソッドを使用することです。これは、MSSQL、MySQL、および MS Access でサブケースのクエリを処理するために Fogbugz で使用されるメソッドです。

モデルは次の場所で説明されています。

http://www.developersdex.com/gurus/articles/112.asp

Fogbugz でのメソッドの使用については、次の場所で説明されています。

http://www.fogcreek.com/FogBugz/blog/post/Subcases-and-Hierarchy.aspx

于 2009-11-04T11:24:27.000 に答える