Chris Eatonさんのblogより
- Ask and you shall receive (An Expert's Guide to DB2 Technology)
上記を読むとDB2 Viper2の新機能としてDECODE文がサポートされる事が書かれています。DECODE文はCASE文のサブセット的な機能なので、新機能追加というよりはシンタックスシュガーなのですが、他RDBMSからの移植時に便利ですね。
で、上記エントリのコメント欄からたどれるページを読むと、Viper 2ではこういう他RDBMSからの移植性向上のための機能が多数追加されるようです。書いているのは開発者のSergeさんです。
以下引用しつつ少し解説します。多くがOracleとの互換性向上を狙ったものですね。
1. ** DUAL
Always works without prefixing a schema
DUAL表はOracleで「常に使える小さい表」として関数のみなどをSELECTしたい時にダミーの表として使われるためのものです。DB2では従来よりSYSIBM.SYSDUMMY1が使用されていましたが、DUALは「カレントスキーマに関係なく使える」という特徴があります。(DB2やOracleは、SELECT文でFROMを省略できません)
2. ** ROWNUM
ROWNUMはアンサーセットの論理的な行番号ですね。アンサーセットの一部分を取り出す際などに使用されます。これまでDB2では自分でOLAP関数で番号を振るなどしていたのですが、これで楽に書けそうです。
3. ** (+) outer join syntax
(+)で外部結合を書けるようになるシンタックスシュガーです。
4. LEAST/GREATEST/NVL/DECODE
CASE文やCOALESCE文など既存関数へのシンタックスシュガーですね。NVLは嬉しい人も多いのではないでしょうか。
5. TO_DATE/TO_CHAR improvement
DB2 supports most common patterns except those requiring language
awareness
TO_DATE,TO_CHARはこれまでも用意されていたのですが、機能が非常に限定的で、他RDBMSのように色々な変換に使用できませんでした。これが改善されるようです。(こちらに今ちょうど苦労されている方がいらっしゃるようです。Viper 2は間に合わないと思いますが。。)
6. ** CONNECT BY
This is a function drop, performance drop will follow
これも一種のシンタックスシュガーですね。WITHでも同様の処理は書けますが、CONNECT BYの方がタイプ量は少なくなりそうです。
7. A slew of syntactic sugar like:
Seq.NEXTVAL and seq.CURRVAL notation
UNIQUE instead of DISTINCT
MINUS instead of EXCEPT
Unnamed nested subqueries (aka inline views)
"SELECT * FROM (SELECT * FROM T)"
CROSSJOIN
8. BITAND/BITOR/.....
この7,8もシンタックスシュガー多種ですね。7.のUnnamed nested subqueryは、Oracleでいうインラインビューです。DB2でも以前から同様の事ができましたが、その場合は必ず
SELECT ... FROM (SELECT ... FROM) AS T
の"AS T"のように相関名を付ける必要がありましたが、これが無くても良くなるようです。
このように、多くが互換性を意識した「文法サポート」的なものではありますが移植時に便利ですし、ROWNUMのように新機能といって良いものも含まれています。
※2007/07/17追記:
上記の互換機能のいくつかは以下のレジストリ変数をセットしないと有効にならないようです。
db2set DB2_COMPATIBILITY_VECTOR=3F
- Ask and you shall receive (An Expert's Guide to DB2 Technology)
上記を読むとDB2 Viper2の新機能としてDECODE文がサポートされる事が書かれています。DECODE文はCASE文のサブセット的な機能なので、新機能追加というよりはシンタックスシュガーなのですが、他RDBMSからの移植時に便利ですね。
で、上記エントリのコメント欄からたどれるページを読むと、Viper 2ではこういう他RDBMSからの移植性向上のための機能が多数追加されるようです。書いているのは開発者のSergeさんです。
以下引用しつつ少し解説します。多くがOracleとの互換性向上を狙ったものですね。
1. ** DUAL
Always works without prefixing a schema
DUAL表はOracleで「常に使える小さい表」として関数のみなどをSELECTしたい時にダミーの表として使われるためのものです。DB2では従来よりSYSIBM.SYSDUMMY1が使用されていましたが、DUALは「カレントスキーマに関係なく使える」という特徴があります。(DB2やOracleは、SELECT文でFROMを省略できません)
2. ** ROWNUM
ROWNUMはアンサーセットの論理的な行番号ですね。アンサーセットの一部分を取り出す際などに使用されます。これまでDB2では自分でOLAP関数で番号を振るなどしていたのですが、これで楽に書けそうです。
3. ** (+) outer join syntax
(+)で外部結合を書けるようになるシンタックスシュガーです。
4. LEAST/GREATEST/NVL/DECODE
CASE文やCOALESCE文など既存関数へのシンタックスシュガーですね。NVLは嬉しい人も多いのではないでしょうか。
5. TO_DATE/TO_CHAR improvement
DB2 supports most common patterns except those requiring language
awareness
TO_DATE,TO_CHARはこれまでも用意されていたのですが、機能が非常に限定的で、他RDBMSのように色々な変換に使用できませんでした。これが改善されるようです。(こちらに今ちょうど苦労されている方がいらっしゃるようです。Viper 2は間に合わないと思いますが。。)
6. ** CONNECT BY
This is a function drop, performance drop will follow
これも一種のシンタックスシュガーですね。WITHでも同様の処理は書けますが、CONNECT BYの方がタイプ量は少なくなりそうです。
7. A slew of syntactic sugar like:
Seq.NEXTVAL and seq.CURRVAL notation
UNIQUE instead of DISTINCT
MINUS instead of EXCEPT
Unnamed nested subqueries (aka inline views)
"SELECT * FROM (SELECT * FROM T)"
CROSSJOIN
8. BITAND/BITOR/.....
この7,8もシンタックスシュガー多種ですね。7.のUnnamed nested subqueryは、Oracleでいうインラインビューです。DB2でも以前から同様の事ができましたが、その場合は必ず
SELECT ... FROM (SELECT ... FROM) AS T
の"AS T"のように相関名を付ける必要がありましたが、これが無くても良くなるようです。
このように、多くが互換性を意識した「文法サポート」的なものではありますが移植時に便利ですし、ROWNUMのように新機能といって良いものも含まれています。
※2007/07/17追記:
上記の互換機能のいくつかは以下のレジストリ変数をセットしないと有効にならないようです。
db2set DB2_COMPATIBILITY_VECTOR=3F













