小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


ORA-01405: フェッチした列の値がNULLです

はじめに

Oracle Pro*cからデータベースのデータをフェッチしようとした場合に、そのカラムがNULLだった場合に、以下のエラーが発生します。

ORA-01405: フェッチした列の値がNULLです

このエラーを回避するには、インジケータ変数(標識変数)を使用します。

新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)
小田 圭二 大塚 信男 五十嵐 建平 谷 敦雄 宮崎 博之 神田 達成 村方 仁
翔泳社
売り上げランキング: 245,507

インジケータ変数を使用する

はじめにDECLARE SECTIONでインジケータ変数を宣言します。

EXEC SQL BEGIN DECLARE SECTION;
  short indi_name = 0;  // インジケータ変数
EXEC SQL END   DECLARE SECTION;

データフェッチする際に、データを格納する変数の直後に、インジケータ変数を指定します。

EXEC SQL FETCH CUR1 INTO :name:indi_name;

上記のようにすることで、カラムがNULLであるか否かの情報がインジケータ変数に格納され、ORA-01405のエラーを回避することができます。