 |
|
| 前のページ 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才のときにプログラミングを始めて以来、常に何かを作っている…。
|
|
 |
|
 |
|