助け合いフォーラム

Oracle DB

Oracle Master Silver SQL 2019(1Z0-071)

with check

公開日 2023/04/18

お世話になっております。
ビューを通して基礎となるテーブルから行を削除する場合、wtih check句は有効かどうかが少し分からなくて
insertの場合は確かに有効のはずですが。。。削除の場合はどうでしょうか?
お手数ですが、どうぞよろしくお願いいたします。

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

わかりやすく説明して頂き、ありがとうございました!

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?