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

ファンクションの移行

ファンクションの移行

   構文や機能性の違いの他に注意するのが、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 [, ...])
USER

user

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

集計ファンクション


OraclePostgreSQL
AVGavg(expression)
COUNTcount(expression)
MAXmax(expression)
MINmin(expression)
STDDEVstddev(expression)
SUMsum(expression)
VARIANCEvariance(expression)
表5-7:集計ファンクション

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

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

この記事をシェアしてください

人気記事トップ10

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

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