|
|
前のページ 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)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
|
|