職場で使える!30代エンジニアのoracleエラー対応

とある三流エンジニアが日々起きた出来事や今打ち込んでいることについて備忘録として残していきます。

oracle

ORA-01722:数値が無効です「DECODE関数の落とし穴について」

投稿日:

スポンサーリンク

一般的な教科書には

DECODE関数の戻り値は

引数と異なるデータ型でも構わない

という記載をよく見かけます。

 

例)
SELECT DECODE(result, 2, ‘不合格’, 1, ‘合格’, ‘集計中’) FROM table;

 

しかし、

DECODE関数が返す値の型は、

第3引数によって決まるのです。

 

つまり、

第3引数がVARCHAR2型であれば、

DATEやNUMBER型などは暗黙の変換

VARCHAR2型になって返却されるので

エラーにはなりません。

 

一方、

第3引数がDATEやNUMBER型である場合は、

それに変換できる値ならエラーとなりませんが、

変換できない場合、

「ORA-01722:数値が無効です」が発生します。

 

以上より、

条件次第では異なるデータ型同志でも正常に動作するが、

条件次第では動作しなくなるという、

極めて不安定な状態になるのです。

 

とどのつまり

一致させなければ落ちるリスクがあり、

バグを埋め込むリスクを負いかねないので、

型は一致させるべきということです。

スポンサーリンク
にほんブログ村 ライフスタイルブログ 40代 自分らしさへ
にほんブログ村
にほんブログ村 ネットブログ Googleへ
にほんブログ村
にほんブログ村 IT技術ブログ Oracleへ
にほんブログ村

-oracle
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

「ORA-00018:最大セッション数を超えました」発生したら諦めろ

時には諦めることも肝心です。 今日は、 ORA-00018 です。   5年ほど在籍しているプロジェクトで初めて遭遇したエラーです。   ORA-00604: 再帰SQLレベル1で …

初心者が嵌るORA-01403:「データが見つかりません」の原因とは?

見ての通り、データが見つからない。 と言う至ってシンプルなエラー。   しかし、単純だからと言って侮ってはいけない。 このエラー、 何もSELECT時のみに発生するとは限らない。 UPDAT …

no image

新発見ORA-01000:最大オープン・カーソル数を超えました。の対処法

意外なことが起因していることがあります。   本日は、 ORA-01000 です。   Javaやcobolの案件でよく ORA-01000:最大オープン・カーソル数を超えました。 …

ORA-01445:「たとえば、キー保存表のない結合ビューからROWIDを選択できません」対処法

このエラーが発生した場合、 現在エラーが発生しているSQLを 修正する必要があります。   SELECT文の結果の列数が1050を超える場合、 結合文の書き方を、 ANSI形式(LEFT J …

no image

ORA-39002:操作が無効です。が出た時の対処法

oracleを疑う前に自分を疑って下さい。 今日は、 ORA-39002 です。   エクスポート(expdp)する際に、 ディレクトリを指定したら、   ORA–39 …

まだデータがありません。