Oracle中向视图中插入数据

插入视图的条件:  
1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,INSERT,UPDATE,DELETE的操作.  
2.如果是连接视图,那就要遵守基本更新准则了.现在我只对INSERT准则做一下说明:在INSERT语句中不能显式或隐式的引用到任何非码保留基础表中的字段,如果在定义视图中使用了WITH CHECK OPTION子句,那就不能对视图执行INSERT操作.  
注:码保留表,非码保留表的解释:  
在DEPT中,DEPT_NO是主码,EMP中,EMP_NO是主码  
然后建立连接视图:  
create view emp_dept as  
select emp.emp_no,emp.emp_name,emp.dept_no,dept.name  
from emp,dept  
where emp.dept_no=dept.dept_no  
  
这个视图中,EMP_NO仍然充当主码,所以EMP为码保留表,而DEPT中的DEPT_NO就不是主码了,所以为非码保留表.  

多张表关联后需要向视图插入数据,建议使用替代触发器

create trigger [触发器名]
on [视图名]
instead of insert
as
begin
--声明变量;
--从inserted表中查出所有列的数据,分别赋给声明好的变量;

--用上面的数据向第一张表插入数据
--用上面的数据向第二张表插入数据
end

此外通过user_updatable_columns表能够查询到该表或者视图是否可更新。

Oracle视图是从一个或多个表定义的虚拟表。由于视图不是真正的表,因此不能向视图直接插入数据。但是,可以通过以下两种方法向视图插入数据: 1. 向视图所依据的表插入数据,然后通过视图查询出来。例如,如果视图是基于一个名为“employees”的表创建的,那么可以向“employees”表插入数据,然后通过视图查询出来。 2. 创建可更新的视图。可更新的视图是一种特殊类型的视图,可以向其插入、更新和删除数据。创建可更新的视图需要满足一定的条件,例如视图必须只包含单个表、必须具有主键或唯一键等。 以下是向已有的表插入数据,然后通过视图查询出来的示例: 假设已有一个名为“employees”的表,包含以下列:employee_id、first_name、last_name、email、phone_number、hire_date、job_id、salary、commission_pct、manager_id、department_id。 可以创建一个视图,查询出所有工资大于5000的员工信息: ``` CREATE VIEW high_salary_employees AS SELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id FROM employees WHERE salary > 5000; ``` 然后,可以向“employees”表插入数据,例如: ``` INSERT INTO employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id) VALUES (1001, 'John', 'Doe', 'johndoe@email.com', '555-1234', '01-JAN-2021', 'IT_PROG', 6000, NULL, 100, 90); ``` 最后,可以通过“high_salary_employees”视图查询出工资大于5000的员工信息,例如: ``` SELECT * FROM high_salary_employees; ``` 输出结果应该包含刚刚插入的“John Doe”员工信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值