Db2 : 外部結合にOracle独自の「(+)」を使用
Db2には以前から、Oracle用の互換フィーチャーが用意されており、
(レジストリ変数 DB2_COMPATIBILITY_VECTOR をセットして利用する)
Oracle用に作成されたアプリケーションを、なるべく作り直さずにDb2で使用できるようになっています。
この互換フィーチャーはバージョン毎にUpdateや追加されており、
現在の最新バージョンであるDb2 11.5の、一つ前のバージョンであるDb2 for LUW 11.1からは、Oracle独自の外部結合(OUTER JOIN)の書き方である「(+)」は、レジストリ変数をセットする必要なく、デフォルトで使用できるようになっています。
つまり、Db2で「(+)」は、何も事前準備をせずに使えるため、気軽に使えるようになっています。
[補足] Db2 10.5までは、外部結合演算子にOracle独自の「(+)」を使うためには、以下のように、DB2_COMPATIBILITY_VECTOR レジストリー変数を 16 進値 0x04 (ビット位置 3) に設定して外部結合演算子のサポートを有効にしてから、インスタンスの停止・再始動をする必要がありました。
db2set DB2_COMPATIBILITY_VECTOR=04
db2stop
db2start
Db2で外部結合に「(+)」を使う
まず、Db2は標準SQLに準拠しているため、LEFT/RIGHT OUTER JOINといった、標準SQLの結合シンタックスを使うことができます。
加えて、Oracle独自の書き方である「(+)」も代替構文として使えます。
例えば、
SELECT * FROM T1,T2
WHERE T1.C1=T2.C2 (+)
と書くこともでき、以下と同じこととなります。
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.C1=T2..C2
Db2のSAMPLEデータベースで「(+)」を試してみる
Db2のSAMPLEデータベースで用意されている、DEPARTMENT表とEMPLOYEE表を、LEFT OUTER JOINしてみます。
まずは、標準SQLの LEFT OUTER JOIN の構文を使ってみます。
SELECT DEPTNAME, LASTNAME FROM
DEPARTMENT D LEFT OUTER JOIN EMPLOYEE E
ON D.DEPTNO = E.WORKDEPT
DEPTNAME LASTNAME
------------------------------------ ---------------
SPIFFY COMPUTER SERVICE DIV. HAAS
PLANNING THOMPSON
INFORMATION CENTER KWAN
SUPPORT SERVICES GEYER
MANUFACTURING SYSTEMS STERN
ADMINISTRATION SYSTEMS PULASKI
OPERATIONS HENDERSON
SOFTWARE SUPPORT SPENSER
SPIFFY COMPUTER SERVICE DIV. LUCCHESSI
SPIFFY COMPUTER SERVICE DIV. O'CONNELL
・・・
(10行のみ表示)
次に、Oracle独自の「(+)」を使って同じことを行います。
シンプルになりました(が、標準SQLの書き方ではないです)。
SELECT DEPTNAME, LASTNAME FROM
DEPARTMENT D, EMPLOYEE E
WHERE D.DEPTNO = E.WORKDEPT (+)
DEPTNAME LASTNAME
------------------------------------ ---------------
SPIFFY COMPUTER SERVICE DIV. HAAS
PLANNING THOMPSON
INFORMATION CENTER KWAN
SUPPORT SERVICES GEYER
MANUFACTURING SYSTEMS STERN
ADMINISTRATION SYSTEMS PULASKI
OPERATIONS HENDERSON
SOFTWARE SUPPORT SPENSER
SPIFFY COMPUTER SERVICE DIV. LUCCHESSI
SPIFFY COMPUTER SERVICE DIV. O'CONNELL
・・・
(10行のみ表示)
参考資料
ビット位置 | 16進値 | 説明 |
---|---|---|
3 | 0x04 | このビットは以前、外部結合演算子のサポートをアクティブにしていました。そのフィーチャーは現在、常にアクティブであるため、このビットは無視されるようになりました。 |
Db2 11.1以降は、このビットをアクティブにする必要はなくなった(デフォルトで使用可能)であることが書かれています。
[Db2 11.5 マニュアルのトップページ]
- 日本語
- 英語
- https://www.ibm.com/docs/en/db2/11.5
- 最新情報は英語で更新されていますので英語で確認するのがお薦めです
[Db2 11.5 システム要件]
- https://www.ibm.com/docs/en/db2/11.5
- 最新情報は英語で更新されていますので英語で確認するのがお薦めです
稼働環境の前提要件等の確認はこちらでおこないます(英語)
Author And Source
この問題について(Db2 : 外部結合にOracle独自の「(+)」を使用), 我々は、より多くの情報をここで見つけました https://qiita.com/camp07/items/6db6af46b70d6278ff89著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .