エンタープライズ:特集 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特別企画]
知っておきたいデータベース移行術「Oracle→DB2編」
・データベースオブジェクト
・データ型
・ビルトイン関数
・SQL文
・ロックと読み取り一貫性

関連リンク
▼JAVA Developer
▼定期購読のご案内
▼バックナンバー販売協力店

JAVA Developer10月号表紙 JAVA Developer 10月号

大特集
再入門 J2SE

特集2 Oracle9i Application Server
[特別企画]
・例外処理のメカニズム
・データベース移行術(2)
 「Oracle→DB2編」
・Tomcatで試すJava2セキュリティ

前のページ | 1 2 3 4 5 6 7 | 次のページ

[竹内 笑子,JAVA Developer]