こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

インラインビューの更新権限について

UPDATE句をインラインビューを使って実施しようと思い

UPDATE ( SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B
WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2
AND B.KEY2='12345') C
SET C.FLD1=C.FLD2
のようにSQLを書きました。

ORA-01779: キー保存されていない表にマップする列は変更できません
のメッセージが出力されました。

CREATE VIEW TEST AS
SELECT A.FLD1,B.FLD2 FROM TBL1 A,TBL2 B
WHERE A.KEY1=B.KEY1 AND CONCAT(A.KEY2,A.KEY3)=B.KEY2
AND B.KEY2='12345'

でビューを作って確認したら
select * from user_updatable_columns where table_name='TEST';

OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA
---------- ----------- --------------- ------ ------ ------
TEST TEST FLD1 NO NO NO
TEST TEST FLD2 NO NO NO

確かにUPDATEできないようです。

テーブルはこんな感じです。
TBL1
-------------------------------------------
KEY1 NUMBER 4 PK
KEY2 NUMBER 5 PK
KEY3 NUMBER 1 PK
FLD1 CHAR 6

TBL2
-------------------------------------------
KEY1 NUMBER 4 PK
KEY2 NUMBER 6 PK
FLD2 CHAR 6

同じように

TBL3
-------------------------------------------
KEY1 NUMBER 2 PK
KEY2 NUMBER 4 PK
KEY3 CHAR 6 PK
KEY4 NUMBER 4 PK
FLD3 CHAR 6


TBL4
-------------------------------------------
KEY1 NUMBER 4 PK
KEY2 CHAR 6 PK
FLD4 CHAR 6

でビューを作ったら
CREATE VIEW TEST2 AS
SELECT A.FLD3,B.FLD4 FROM TBL3 A,TBL4 B
WHERE A.KEY2=B.KEY2 AND A.KEY3=B.KEY3
AND A.KEY1='12'
AND A.KEY4='1234'

OWNER TABLE_NAME COLUMN_NAME UPDATA INSERT DELETA
---------- ----------- --------------- ------ ------ ------
TEST TEST2 FLD3 YES YES YES
TEST TEST2 FLD4 NO NO NO

更新可能なようです。

ビューを作ったとき、UPDATEやINSERT文が有効・無効になる違いは何でしょうか?
毎回一旦ビューを作って
select * from user_updatable_columns where table_name='TEST';
のような確認しかできないのでしょうか?

よろしくお願いいたします。

投稿日時 - 2011-09-07 10:24:35

QNo.6995019

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>ビューを作ったとき、UPDATEやINSERT文が有効・無効になる違いは何でしょうか?
おおざっぱにいうとVIEWがテーブルの主キーを保持しているか、ということではないですかね。
このあたりを読んでみてください。
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_8004.htm#sthref5559
http://download.oracle.com/docs/cd/E16338_01/server.112/b56301/views001.htm#i1006318

投稿日時 - 2011-09-07 19:20:31

補足

ありがとうございます。
テーブルの主キーを保持しているかというのは、VIEWの中に主キー一部を含んでいるという事か、すべて含んでいるかというのがよく分かりません。

投稿日時 - 2011-09-08 18:04:05

お礼

ありがとうございます。
テーブルの主キーを保持しているかというのは、VIEWの中に主キー一部を含んでいるという事か、すべて含んでいるかというのがよく分かりません。

投稿日時 - 2011-09-13 15:36:49

あなたにオススメの質問