包含子查询的一条insert语句

本文介绍了在Oracle中如何使用带有子查询的INSERT语句,特别是WITH CHECK OPTION的用法。通过示例解释了当插入的列值不满足子查询中的WHERE条件或者WHERE条件中涉及未在SELECT子句中的列时,数据库将不允许插入数据。同时讨论了不加WITH CHECK OPTION时的插入行为。
摘要由CSDN通过智能技术生成

例子:

INSERT INTO (SELECT order_id,order_date,customer_id
FROM ORDERS
WHERE order_total = 1000
WITH CHECK OPTION)
VALUES (13, SYSDATE, 101);

 

insert into (<select clause> WITHCHECK OPTION) values (...)
1:这样的语法看起来很特殊,其实是insert 进subquery 里的这张表里(可以把子查询当做一个
视图),如果插入的对应列值不满足subquery 里的where 条件的话,就不允许插入。


2: 如果插入的列有不在子查询里, 以此来作为检查的where条件的话,不允许插入。比如上边例子:order_total 这个where 条件,它不在子查询中select的列列表中。因此没法进行用此列来判断WHERE条件是否正确。所以会此SQL语句会收到报错信息。下是实验。


3:如果不加WITH CHECK OPTION 则在插入时不会检查。这里注意,subquery 其实是不会实际执
行的。
SQL> create table dept(a int primary key not null,bint not null,c int);
SQL> insert into dept values(1,2,3);
不加WITH CHECK OPTION 则在插入时不会检查 ok
Sql>insert into(select a,b,c from dept where c=3 )values (4,4,4);


4、如果插入的列有不在子查询里作为检查的where条件对应的列话,不允许插入,此处因为没有插
入c 列,而已经在子查询里做了检查,所以失败
Sql>insert into(select a,b from dept wherec=3 with check option) values (5,5);
ORA-01402: 视图 WITH CHECK OPTIDN where 子句违规


5、如果插入的对应列值不满足subquery 里的where 条件的话,也不允许插入。此处因为插入的c
列(值6)不满足子查询的条件’c=3’,所以失败
Sql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值