| エンタープライズ:特集 |
2003/08/24 11:32:00 更新 |
[JAVA Developer特別企画]2003年10月号
知っておきたいデータベース移行術「Oracle→DB2編」 (5/7)
■(3)ビルトイン関数
Oracle、DB2ともSQL99に対応していますが、すべてのビルトイン関数をそのまま利用できるわけではありません。
・(1)名前と処理内容が同じ
Oracleのビルトイン関数には、DB2でも関数名と処理内容が同じものがあります(表5)。表中、「◎」がついている関数についてはそのまま使用できます。それ以外の関数は、多少の制限が発生します。
表5 直接マッピングできる関数
| 関数 |
互換性 |
| ABS |
◎ |
| ASCII |
◎ |
| CHAR |
◎ |
| CONCAT |
○(型に互換性が必要) |
| COUNT |
◎ |
| LENGTH |
△(VARCHAR型とCHAR型で意味が異なる) |
| LTRIM |
△(引数が1つの場合のみ) |
| LOWER |
◎ |
| MAX |
◎ |
| MIN |
◎ |
| MOD |
○(n=0のみ) |
| POWER |
◎ |
| REPLACE |
○ |
| SIGN |
◎ |
| RTRIM |
△(引数が1つの場合のみ) |
| SOUNDEX |
◎ |
| SUBSTR |
○ |
| SUM |
◎ |
| TRANSLATE |
△(引数の並びが逆) |
| UPPER |
◎ |
| USER |
○ |
|
|
・(2)出力フォーマットが異なる
関数の中には、名前や基本的な機能は同じだけれど、出力フォーマットが異なるものがあります(表6)。これらは、基本的に数値型(実数値)の違いが影響しているもので、とくに出力結果の精度には注意が必要です。
またOracleでは、ROUNDおよびTRUNC関数が数値型だけでなく、日付型にも対応しています。DB2の場合は、日付型に対応していませんから、そのまま移行することはできません。
表6 同じ名前でも出力フォーマットが異なる関数
| 三角関数 |
ACOS、ASIN、ATAN、ATAN2、ATANH、COS、COSH、SIN、SINH、TAN、TANH |
| まるめ・切り捨て |
CEIL、FLOOR、ROUND、TRUNC |
| 指数 |
EXP |
| 対数 |
LN |
| 平方根 |
SORT |
| 平均 |
AVG |
・(3)関数名が異なる
表7は、関数名が異なりますが、同等機能を提供する関数の対応表です。文法の違いにより制限がある関数もありますが、それぞれ置き換え可能です。
表7 同等機能を持つ異なる名前の関数で対応
| Oracle |
DB2 |
互換性 |
| INSTR、INSTRB |
LOCATE |
△(引数4をとらない場合のみ) |
| LENGTHB |
LENGTH |
◎ |
| LOG |
LOG10 |
△(定数が10のときのみ) |
| RAWTOHEX |
HEX |
◎ |
| NVL |
COALESCE |
○(DB2では型に互換性が必要) |
| SUBSTRB |
SUBSTR |
○ |
| SYSDATE |
CURRENT DATE |
○ |
| TO_MULTI_BIYE |
VARGRAPHIC |
○ |
| VSIZE |
LENGTH |
◎ |
・(4)置き換えできない、条件が限定される関数
Oracleの関数には、置き換えできないもの、特定の条件下でのみ置き換え可能なものがあります(表8)。
表8 置き換えできない、置き換えが難しい関数
| 集計関数 |
VARIANCE |
| 算術関数 |
BITAND |
| 文字列関数 |
INITCAP |
| LPAD |
| NLS_INITCAP |
| NLS_LOWER |
| NLS_SORT |
| NLS_UPPER |
| RPADTO_CHAR |
| TRANSLATE USING |
| 変換関数 |
CHARTOROWID |
| CONVERT |
| HEXTORAW |
| ROWIDTOCHAR |
| TO_DATE |
| TO_NUMBER |
| TO_SINGLE_BYTE |
| 日付関数 |
ADD_MONTH |
| LAST_DAYLEAST |
| MONTHS_BETWEEN |
| NEXT_DAY |
| NEW_TIME |
| そのほか |
BFILENAME |
| DEREF |
| DUMP |
| EMPTY_LOB |
| GREATEST |
| MAKE_REF |
| NLS_CHARSET_DEC_LEN |
| NLS_CHARSET_ID |
| NLS_CHARSET_NAME |
| NVL2 |
| UID |
| USERENV |
OracleのTO_NUMBER関数について、小数点以下桁数や精度については変換関数decimal(n、p、s)関数で対応可能なケースがあります。また、文字列から数値への変換などであれば、各種変換関数(smallint、decimal、doubleなど)を使用して変換できます。たとえば、smallint型に変換するには次のように指定します。
SELECT smallint('12')
FROM SYSIBM.SYSDUMMY1;
|
なお、DB2 V8にはTIMESTAMP型を文字列に変換するTO_CHAR関数、文字列をTIMESTAMP型に変換するTO_DATE関数があります。フォーマット形式は、「YYYY-MM-DD HH24:MM:SS」のみです。多様な変換形式を持つOracleの同名の関数とDB2 V8の関数を1:1で置き換えるのは困難なことです。移行の必要がある場合は、UDFを作成して対応してください。
関連リンク
JAVA Developer
定期購読のご案内
バックナンバー販売協力店
|
JAVA Developer 10月号
大特集
再入門 J2SE
特集2 Oracle9i Application Server
[特別企画]
・例外処理のメカニズム
・データベース移行術(2) 「Oracle→DB2編」
・Tomcatで試すJava2セキュリティ
|
|
前のページ | 1 2 3 4 5 6 7 | 次のページ
[竹内 笑子,JAVA Developer]