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

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

oracle

SELECTした項目でUPDATEする際に発生する「ORA-01407:(ユーザ名.テーブル名.項目名)をNULLには更新できません。」

投稿日:

スポンサーリンク

今日は、

ORA-01407:(ユーザ名.テーブル名.項目名)をNULLには更新できません。

について、解説します。

 

開発中に

UPDATE文を作成する際の基本公式は、

UPDATE テーブル名 SET 項目名=値

となりますが、

UPDATE対象の項目がたくさんある場合などちょっと面倒です。

 

そこでよく使われるのが、

SET句にSELECT文を書いてしまう手法です。

UPDATE tableA A SET (A.項目1, A.項目2, A.項目3) = (SELECT B.項目1, B.項目2, B.項目3 FROM table B where A.key = B.key AND B.項目4 = ‘1’);

のようになります。

 

このように、

テーブルAとテーブルBを結合し、テーブルBのとある項目でテーブルAの項目を更新したい時によく使う手法です。

 

しかし、テーブルBのSELECT結果(レコード件数)がテーブルAのレコード件数より少ない場合、

テーブルAにはNULLで埋めようと更新を試みるようです。

 

これにより、ORA-01407が発生します。

対処として一番簡単なのは、

UPDATE tableA A SET (A.項目1, A.項目2, A.項目3) = (SELECT B.項目1, B.項目2, B.項目3 FROM table B where A.key = B.key)

AND exists (SELECT 0 FROM table B where A.key = B.key AND B.項目4 = ‘1’);

のように

existsを付けて、更新レコード(テーブルA)とSELECTレコード(テーブルB)の件数を揃えてあげることです。

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

-oracle
-

執筆者:


comment

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

関連記事

no image

オラクルエラーORA-01502の対処の仕方

これくらいならすぐ解決します! 今日は、 ORA-01502 です。   ORA-01502: 索引’SCOTT.PK_EMP’またはそのパーティションが使用不可の状 …

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

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

no image

ORA-26026: 一意索引○○は初期状態では使用不可です。

安心してください!すぐ直ります❗ 今日は、 ORA-26026 です。   この手のエラーの原因は、 SQL*Loaderなどで同一キーデータが2件insert してしまっている可能性大です …

ORA-00312: オンライン・ログ1 スレッド1:の対処の仕方

今日は、 ORA-00312 を解説します。   これは一概には何とも言えませんね。 長期化する恐れありです。   このメッセージは、 オンライン REDO ログファイル によって …

ORA-12560:「TNS: プロトコル・アダプタ・エラーが発生しました」対処法

まずは設定を見直してください。   今日は、 「ORA-12560」 についてです。   初期構築時によく見られるエラーです。   接続先の設定が間違っていることが多いで …

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