Warning: session_start(): open(/home/var/php/b/v/sess_bvodu86i8fqhe7vs9blfk70495, O_RDWR) failed: No such file or directory (2) in /home/users/web07/2/1/0219112/phyokin/devlog/controllers/controller.php on line 15

Warning: session_start(): Failed to read session data: files (path: 2;/home/var/php) in /home/users/web07/2/1/0219112/phyokin/devlog/controllers/controller.php on line 15
devlog
MW211 EXIT

devlog
Oracle/エラーORA-01779
2017年07月30日
「ORA-01779:キー保存されていない表にマップする列は変更できません」の主な原因。

以下だとOK。
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT "表1"."列1",                                                 │
│               "表2"."列2"                                                  │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."主キー" = "表1"."主キー"                        │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘

でも、以下だとNG(本エラー)。
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT "表1"."列1",                                                 │
│               "表2"."列2"                                                  │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."非主キー" = "表1"."非主キー"                    │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘
入力元(表2)が複数ある場合を恐れて、制限している。
なお、理論上、単数になることを保証できても、許してくれないようだ。


ヒント句「/*+ BYPASS_UJVC */」で回避(強制実行)できた時代もあったようだが
Oracle11g以降は厳しくなってできなくなっている
┌──────────────────────────────────────┐
│UPDATE (                                                                    │
│        SELECT /*+ BYPASS_UJVC */ "表1"."列1",                              │
│                                  "表2"."列2"                               │
│            FROM "表1"                                                      │
│                INNER JOIN "表2"                                            │
│                  ON "表2"."非主キー" = "表1"."非主キー"                    │
│    )                                                                       │
│    SET "列1" = "列2";                                                      │
└──────────────────────────────────────┘
分類:Oracle