助け合いフォーラム
お世話になっております。
ビューを通して基礎となるテーブルから行を削除する場合、wtih check句は有効かどうかが少し分からなくて
insertの場合は確かに有効のはずですが。。。削除の場合はどうでしょうか?
お手数ですが、どうぞよろしくお願いいたします。
r
rink_rew
2023/07/07 18:54
こういうことでしょうか。
SQL> select * from emp;
EMP_ID EMP_NAME SAL
---------- ---------- ----------
1001 aaa 100000
1002 bbb 200000
SQL> create view emp_view_check as select * from emp where sal = 200000 with check option;
ビューが作成されました。
SQL> select * from emp_view_check;
EMP_ID EMP_NAME SAL
---------- ---------- ----------
1002 bbb 200000
SQL> delete from emp_view_check where emp_id = 1001;
0行が削除されました。
SQL> delete from emp_view_check where emp_id = 1002;
1行が削除されました。
SQL> select * from emp;
EMP_ID EMP_NAME SAL
---------- ---------- ----------
1001 aaa 100000
SQL>
作成したビューを通して元表のデータを削除する場合、そのビューに含まれるレコードは作成時の条件を満たす(with check optionのチェックを通っている)ものだけなので、もしdelete文の対象とするレコードがビューの作成条件を満たしていないのならば、そのビューからはそもそも見えていないデータだと思います。
このようなdelete文においては、上記の実行例によれば、delete文自体はエラーにはならないが、実際には何も削除されないようです。
コメント
この投稿に対して返信しませんか?
x ximen
2023/11/08 08:29
わかりやすく説明して頂き、ありがとうございました!