TOP書籍連動> ファンクションの移行
まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

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

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

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


ファンクション対応表

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

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

単一行ファンクション
Oracle PostgreSQL
ABS abs(x)
ACOS acos(x)
ASIN asin(x)
ATAN atan(x)
ATAN2 atan2(x, y)
BITAND bitand(x, y)
CEIL ceil(dp or numeric)
COS cos(x)
EXP exp(dp or numeric)
FLOOR floor(dp or numeric)
LN ln(dp or numeric)
LOG log(dp or numeric)
MOD mod(y, x)
POWER pow(a dp, b dp)
ROUND (数値) round(dp or numeric)
SIGN sign(dp or numeric)
SIN sin(x)
SQRT sqrt(dp or numeric)
TAN tan(x)
TRUNC (数値) trunc(dp or numeric)

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

Oracle PostgreSQL
CHR chr(integer)
CONCAT concat(string1, string2)
INITCAP initcap(text)
LOWER lower(string)
LPAD lpad(string text, length integer[, fill text])
LTRIM ltrim(string text, characters text)
REPLACE replace(string text, from text, to text)
RPAD rpad(string text, length integer [, fill text])
RTRIM rtrim(string text, characters text)
SUBSTR substr(string, from [, count])
TRANSLATE translate(string text, from text, to text)
TRIM trim([leading / trailing / both][characters] from string)
UPPER upper(string)

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

Oracle PostgreSQL
ASCII ascii(text)
INSTR instre(string1, string2)
LENGTH length(string)
LENGTHB octet_length(string)

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

Oracle PostgreSQL
ADD_MONTHS add_months(date, add_number)
CURRENT_DATE current_date
CURRENT_TIMESTAMP current_timestamp
EXTRACT(日時) extract(field from timestamp)
LAST_DAY last_day(date)
LOCALTIMESTAMP localtimestamp
MONTHS_BETWEEN months_between(date1, date2)
NEXT_DAY next_day(date, string)
SYSDATE current_date
SYSTIMESTAMP systimestamp
TO_TIMESTAMP to_timestamp(text, text)
TRUNC(日付) date_trunc(text, timestamp)

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

Oracle PostgreSQL
ASCIISTR to_ascii(text [, encoding])
BIN_TO_NUM bin_to_num(int[, ...])
CAST CAST(expression AS type)
CONVERT convert(string text,[src_encoding name,]dest_encoding name)
TO_CHAR(日時) to_char(timestamp, text)
TO_CHAR(数値) to_char(int, text)
TO_DATE to_date(text, text)
TO_NUMBER to_number(text, text)

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

Oracle PostgreSQL
COALESCE COALESCE(value [, ...])
DECODE decade(string text, type text)
GREATEST greatest(value [, ...])
LEAST least(value [, ...])
NULLIF NULLIF(value1, value2)
NVL COALESCE(value [, ...])
NVL2 COALESCE(value [, ...])
USER user

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

集計ファンクション
Oracle PostgreSQL
AVG avg(expression)
COUNT count(expression)
MAX max(expression)
MIN min(expression)
STDDEV stddev(expression)
SUM sum(expression)
VARIANCE variance(expression)

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

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

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

前のページ  1  2


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


INDEX
第6回:SQL文の移行(3)
  集合演算
ファンクションの移行