~暗黙変換~
みなさん、こんにちは。
どうも、さいばーきゃっとです。
唐突ですが、Oracleデータベースの「暗黙的な変換」をご存知でしょうか。恥ずかしながら、私は業務を通して、最近知りました。
そこで、今回はOracleデータベースの「暗黙変換」について、話そうと思います。
暗黙変換
暗黙変換とは、Oracle データベースが、あるデータ型から別のデータ型への変換が意味を持つ場合、列の値を自動的に変換する仕組みである。もし意味を成さない変換の場合にはエラーとなる。
Oracleデータベースにはもともと、列の値が変換できると判断した場合、自動的にデータ型を変換(暗黙変換)する仕組みがあるそうです。
暗黙変換が行われる代表例を以下にまとめてみました。
「暗黙変換」のメリットは、「CHAR(VARCHAR2)」 ➡ 「NUMBER」に、自動的にデータ型を変換することができ、データ型「CHAR(VARCHAR2)」に格納されている数値に、算術演算子や比較演算子が指定することができるようなります。
「CHAR(VARCHAR2)」 ➡ 「NUMBER」
では、実際にOracleデータベースを使用して、「CHAR(VARCHAR2)」 ➡ 「NUMBER」に変換する「暗黙変換」を見ていきましょう。
使用する表は以下になります。
上記の「暗黙変換」表のテーブル定義は、以下になります。
では早速、「文字型」列の「100」と、「数値型」列の「100」に「1」を加算してみましょう。
「文字型」列の「100」と、「数値型」列の「100」に「1」が加算され、それぞれ「101」と表示されましたね。このように、「文字型」列のデータ型が「VARCHAR2」にもかかわらず、数値としてデータ型を変換することを「暗黙変換」というのです。
では次に、「文字型」列の「0100」という値が「暗黙変換」できるか試してみましょう。
「文字型」列と「数値型」列の値に、「1」を加算します。
いかがですか。 どうやらOracleデータベースでは、数字のみで構成されている文字列であれば、自動的に数値データに「暗黙変換」してくれるそうですね。
では最後に、「文字型」列の「百」という文字列の値に、「1」を加算するとどうなるか試してみましょう。
「文字型」列と「数値型」列の値に、「1」を加算します。
いかがでしたでしょうか。どうやら文字列を数値に変換できない場合には 、「ORA-01722: 数値が無効」というエラーが発生するのがお決まりだそうです。