Oracle Databaseの独自関数について
こんにちは。先日仕事で、ソースコードのOracle DatabaseのSQL文を見ているとDECODE関数が使用されており、不勉強ということもあるのですが、調べたところOracle独自のCase文互換の関数ということが分かりました。そこでふとOracleの独自関数が他にもあるのか調べてみたいと思い、以下に書き連ねてみました。
まずDECODE関数です。SQL例文は「select decode(num, 1, a, 2, b, … , ‘null’) from XXX;」→ numが1ならa、2ならb、…、それ以外ならnullになります。例文の’null’の部分の前は同じ形式を繰り返すことで条件分岐を増やせます。’null’の部分はcase文でいうdefaultに当たります。
次にTO_MULTI_BYTE、TO_SINGLE_BYTEです。SQL例文は「to_multi_byte(string)」「to_single_byte(string)」→ 見た目の通りでmultiの方はstringに含まれるシングルバイト文字列をマルチバイト文字列に、singleの方はstringに含まれるマルチバイト文字列をシングルバイト文字列へ変換するというものです。但し、文字や文字コードの種類によっては変換不可です。(半角カナやAL16UTF16など)
次にSUBSTRBです。SQL例文は「substrb(string, position [,length])」→ 他のSQLにもあるSUBSTRと同じでstringの中からpositionの位置から部分文字列を取り出す(lengthは文字列長)という形式ですが、最後にBがつくことでバイト単位の計算となっており、ここが独自となっております。
最後にINSTRBです。SQL例文は「instrb(string, substring [,position [,num]])」→ こちらも他のSQLにもあるINSTRと同じでstringの中からsubstring文字列の位置を割り出す(positionは検索開始位置、numは割り出すまでの検知回数」)という形式ですが、やはり最後にBがつくことでバイト単位の計算となっております。
他にも探せばあるかもしれませんが、代表的と思われる上記のものを述べて、本日はここまでとさせていただきます。ではまた。