とあるITエンジニアたちの備忘録

新米エンジニア5人がお送りする、ちょっとためになる話

~暗黙変換~

みなさん、こんにちは。

どうも、さいばーきゃっとです。

唐突ですが、Oracleデータベースの「暗黙的な変換」をご存知でしょうか。恥ずかしながら、私は業務を通して、最近知りました。
そこで、今回はOracleデータベースの「暗黙変換」について、話そうと思います。

暗黙変換

暗黙変換とは、Oracle データベースが、あるデータ型から別のデータ型への変換が意味を持つ場合、列の値を自動的に変換する仕組みである。もし意味を成さない変換の場合にはエラーとなる。

Oracleデータベースにはもともと、列の値が変換できると判断した場合、自動的にデータ型を変換(暗黙変換)する仕組みがあるそうです。

暗黙変換が行われる代表例を以下にまとめてみました。

f:id:cloudy0901:20161204224958p:plain

「暗黙変換」のメリットは、「CHAR(VARCHAR2)」 ➡ 「NUMBER」に、自動的にデータ型を変換することができ、データ型「CHAR(VARCHAR2)」に格納されている数値に、算術演算子や比較演算子が指定することができるようなります。

「CHAR(VARCHAR2)」 ➡ 「NUMBER」

では、実際にOracleデータベースを使用して、「CHAR(VARCHAR2)」 ➡ 「NUMBER」に変換する「暗黙変換」を見ていきましょう。

 

使用する表は以下になります。

f:id:cloudy0901:20161204230729p:plain

 

上記の「暗黙変換」表のテーブル定義は、以下になります。

f:id:cloudy0901:20161204230924p:plain

 

では早速、「文字型」列の「100」と、「数値型」列の「100」に「1」を加算してみましょう。

f:id:cloudy0901:20161204231200p:plain

「文字型」列の「100」と、「数値型」列の「100」に「1」が加算され、それぞれ「101」と表示されましたね。このように、「文字型」列のデータ型が「VARCHAR2」にもかかわらず、数値としてデータ型を変換することを「暗黙変換」というのです。

 

では次に、「文字型」列の「0100」という値が「暗黙変換」できるか試してみましょう。

f:id:cloudy0901:20161204231644p:plain

 

「文字型」列と「数値型」列の値に、「1」を加算します。

f:id:cloudy0901:20161204231700p:plain

 いかがですか。 どうやらOracleデータベースでは、数字のみで構成されている文字列であれば、自動的に数値データに「暗黙変換」してくれるそうですね。

 

では最後に、「文字型」列の「百」という文字列の値に、「1」を加算するとどうなるか試してみましょう。

f:id:cloudy0901:20161204231808p:plain

 

「文字型」列と「数値型」列の値に、「1」を加算します。

f:id:cloudy0901:20161204231824p:plain

 いかがでしたでしょうか。どうやら文字列を数値に変換できない場合には 、「ORA-01722: 数値が無効」というエラーが発生するのがお決まりだそうです。