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表能够查询到该表或者视图是否可更新。 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1490248

资料引用:http://www.knowsky.com/384856.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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”员工信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值