ヒント
BYPASS_UJVC
/*+ BYPASS_UJVC */
「ORA-01779: キー保存されていない表にマップする列は変更できません」
/*+ BYPASS_UJVC */」をオミットする
必要があります。
UPDATE (
SELECT
/*+ BYPASS_UJVC */
X.JISSEKI_HOUSHO_ID,
B.JISSEKI_HOUSHO_ID AS id
FROM
RP_HOUSHO_TAISHOSHA X
LEFT JOIN
RENEPAT.RP_HOUSYOU_TAISYOUSHA A
ON
x.HOUSHO_TAISHOSHA_ID = a.rp_pk_no
LEFT JOIN
RP_JISSEKI_HOUSHO B
ON
A.RP_JISSEKI_ID = B.HATSUMEI_NO || B.KUNI_EDA || B.HOUSHO_NEN || B.JISSEKI_NEN
WHERE
A.RP_JISSEKI_ID IS NOT NULL
) XX SET
xx.JISSEKI_HOUSHO_ID = xx.id
http://www.geocities.jp/oraclesqlpuzzle/10-107.html
--UpdatableViewを使わない方法(相関サブクエリを利用)
update Table1 a
set Col2 = (select b.Col2 from Table2 b
where b.Col1 = a.Col1)
where exists(select 1 from Table2 b
where b.Col1 = a.Col1);
--UpdatableViewを使う方法
update (select a.Col2 as OldCol2,
b.Col2 as NewCol2
from Table1 a,Table2 b
where a.Col1 = b.Col1)
set OldCol2 = NewCol2;
--UpdatableViewを使う方法(usingを使用)
update (select a.Col2 as OldCol2,
b.Col2 as NewCol2
from Table1 a Join Table2 b
using (Col1))
set OldCol2 = NewCol2;
--mergeを使う方法(9iなら無意味なinsert文が必要)
merge into Table1 aa
using (select a.RowID as Row_ID,b.Col2 as NewCol2
from Table1 a Join Table2 b
using (Col1)) bb
on (aa.RowID=bb.Row_ID)
when matched then
update set aa.Col2= bb.NewCol2;
|
Oracleでテキストインデックスを使用す
Oracleのテクニックを記
VARCHAR2をNUMBERに変換する際、桁数で怒られるときに桁数を無視するfunction
SQLのテクニックを記
|