
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';
のような確認しかできないのでしょうか?
よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>ビューを作ったとき、UPDATEやINSERT文が有効・無効になる違いは何でしょうか?
おおざっぱにいうとVIEWがテーブルの主キーを保持しているか、ということではないですかね。
このあたりを読んでみてください。
http://download.oracle.com/docs/cd/E16338_01/ser …
http://download.oracle.com/docs/cd/E16338_01/ser …
この回答への補足
ありがとうございます。
テーブルの主キーを保持しているかというのは、VIEWの中に主キー一部を含んでいるという事か、すべて含んでいるかというのがよく分かりません。
ありがとうございます。
テーブルの主キーを保持しているかというのは、VIEWの中に主キー一部を含んでいるという事か、すべて含んでいるかというのがよく分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- PHP php エラー 2 2022/10/23 16:43
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- 大学受験 英作文の添削をお願いしたいです。 2 2022/08/19 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名を[]でくくらないと...
-
CLOB型へのINSERT
-
alter table でチェックボック...
-
truncate文で全テーブルを一気...
-
Oracle複数の表をもとにmerge文...
-
SQLでCREATE TABLE文の作成
-
ORA-00959: 表領域'****'は...
-
データを削除しても表領域の使...
-
異なるスキーマからデータを抽...
-
SQLでスキーマ名(所有者名)の...
-
INDEXの無効化
-
同じSELECT文同士でのデ...
-
Data Pump で大量データインポ...
-
Access レコードを追加できませ...
-
datapumpの実行方法について
-
Viewにインデックスは張れ...
-
RDBのテーブル種類の違い
-
ACCESS 複数テーブル・複数フィ...
-
エクセルからアクセスにインポ...
-
他の処理でselectさせないよう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLOB型へのINSERT
-
truncate文で全テーブルを一気...
-
oracleのプライマリ・キー名の変更
-
Oracle複数の表をもとにmerge文...
-
テーブル名を[]でくくらないと...
-
グループの数を取得したい
-
1つのテーブル・2つの列を結合...
-
主キーが二つのテーブルのselec...
-
複数テーブルのUPDATE
-
count(1)とcount(*)の違い
-
Oracle テーブルの列削除
-
OracleのCreate Table 文のStor...
-
SQLのto_char関数の未定義エラー
-
質問344の続きですが・・
-
SQLで・・
-
DBで第1正規形と第2正規形の...
-
Oracle上のテーブルからCREATE ...
-
ストアドファンクションの戻り...
-
"table device"とは何かについて
-
sqlplusで実行したSQLの結果を...
おすすめ情報