第6回:SQL文の移行(3) (2/2)

まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第6回:SQL文の移行(3)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/11/11
前のページ  1  2
ファンクションの移行

   構文や機能性の違いの他に注意するのが、SELECT文などで組み込みファンクションを使用している場合です。

   「等価な機能を持った組み込みファンクションが移行先にない」あるいは「等価なものがあるが名前が違う」などの場合には変更する必要があります。


ファンクション対応表

   Oracleの主な関数に対応する「PostgreSQLファンクション対応表」を表5に示します。各関数の引数の意味や順番は異なることがありますので、移行の際にはそれぞれのマニュアルを参照してください。

   表5を見ると、Oracleの組み込みファンクションに対して、意外に多くのPostgreSQLファンクションが対応していることがわかります。OracleにあってPostgreSQLに存在しないのは、XMLを処理するファンクションや、さまざまな集計処理を行う分析ファンクションなどです。そのPostgreSQLファンクション対応表を次表に示します。

単一行ファンクション
OraclePostgreSQL
ABSabs(x)
ACOSacos(x)
ASINasin(x)
ATANatan(x)
ATAN2atan2(x, y)
BITANDbitand(x, y)
CEILceil(dp or numeric)
COScos(x)
EXPexp(dp or numeric)
FLOORfloor(dp or numeric)
LNln(dp or numeric)
LOG log(dp or numeric)
MODmod(y, x)
POWERpow(a dp, b dp)
ROUND(数値) round(dp or numeric)
SIGNsign(dp or numeric)
SINsin(x)
SQRTsqrt(dp or numeric)
TANtan(x)
TRUNC(数値) trunc(dp or numeric)

表5-1:数値ファンクション

OraclePostgreSQL
CHRchr(integer)
CONCATconcat(string1, string2)
INITCAPinitcap(text)
LOWERlower(string)
LPADlpad(string text, length integer[, fill text])
LTRIMltrim(string text, characters text)
REPLACEreplace(string text, from text, to text)
RPADrpad(string text, length integer [, fill text])
RTRIMrtrim(string text, characters text)
SUBSTRsubstr(string, from [, count])
TRANSLATEtranslate(string text, from text, to text)
TRIMtrim([leading / trailing / both][characters] from string)
UPPERupper(string)

表5-2:文字値を戻す文字ファンクション

OraclePostgreSQL
ASCIIascii(text)
INSTRinstre(string1, string2)
LENGTHlength(string)
LENGTHBoctet_length(string)

表5-3:数値を戻す文字ファンクション

OraclePostgreSQL
ADD_MONTHSadd_months(date, add_number)
CURRENT_DATEcurrent_date
CURRENT_TIMESTAMPcurrent_timestamp
EXTRACT(日時)extract(field from timestamp)
LAST_DAYlast_day(date)
LOCALTIMESTAMPlocaltimestamp
MONTHS_BETWEENmonths_between(date1, date2)
NEXT_DAYnext_day(date, string)
SYSDATEcurrent_date
SYSTIMESTAMPsystimestamp
TO_TIMESTAMPto_timestamp(text, text)
TRUNC(日付)date_trunc(text, timestamp)

表5-4:日時ファンクション

OraclePostgreSQL
ASCIISTRto_ascii(text [, encoding])
BIN_TO_NUMbin_to_num(int[, ...])
CASTCAST(expression AS type)
CONVERTconvert(string text,[src_encoding name,]dest_encoding name)
TO_CHAR(日時)to_char(timestamp, text)
TO_CHAR(数値)to_char(int, text)
TO_DATEto_date(text, text)
TO_NUMBERto_number(text, text)

表5-5:変換ファンクション

OraclePostgreSQL
COALESCECOALESCE(value [, ...])
DECODEdecade(string text, type text)
GREATESTgreatest(value [, ...])
LEASTleast(value [, ...])
NULLIFNULLIF(value1, value2)
NVLCOALESCE(value [, ...])
NVL2COALESCE(value [, ...])
USERuser

表5-6:その他の単一行ファンクション

集計ファンクション
OraclePostgreSQL
AVGavg(expression)
COUNTcount(expression)
MAXmax(expression)
MINmin(expression)
STDDEVstddev(expression)
SUMsum(expression)
VARIANCEvariance(expression)

表5-7:集計ファンクション

   組み込みファンクションは、システムに埋め込まれたSQL文の中で、数多く使用されていることが考えられます。これらをすべて変更するのは大変ですが、構文と違ってファンクションはユーザが簡単に定義できます。そのため、同名・同機能の関数を作成してしまえば、移行の手間が減ってラクになります。同じ機能で名前だけが違う関数があるなら、同名の関数を作って、その中から呼び出すようにするのがよいでしょう。できるだけ変更の手間を減らすのが移行のコツです。

   次からは、変換に注意を要するものを見ていきましょう。

前のページ  1  2


奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第6回:SQL文の移行(3)
 集合演算
ファンクションの移行
PostgreSQLとOracleによるデータベース相互移行マニュアル
第1回データベース移行
第2回データの移行(1)
第3回データの移行(2)
第4回SQL文の移行(1)
第5回SQL文の移行(2)
第6回SSQL文の移行(3)
第7回ファンクションの移行(1)
第8回ファンクションの移行(2)
第9回ストアドプロシージャの移行(1)
第10回ストアドプロシージャの移行(2)
第11回ストアドプロシージャの移行(3)
第12回ストアドプロシージャの移行(4)
第13回まとめ

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored