我在Oracle 12c中创建了一些带有一些约束的视图。但是当我插入违反约束的值时,也能够从视图中插入。这似乎是一个漏洞。
- 创建视图Emp_1
CREATE VIEW Emp_1
AS
SELECT Empid, Ename, Salary
FROM employees
WHERE salary < 25000
此视图仅显示薪水少于25000的员工。
但是当我插入薪水超过25000的员工时,View允许我插入(这是不正确的)。但是当我查询视图(这是正确的)时它不会出现
这是设计还是我可以做些什么来克服这个问题?
从技术上讲,这是一个可插入的视图。所以它允许插入。但从概念上讲,用户只能看到薪水低于25000的员工。因此,不允许插入超过条件的员工。
如果我错了请纠正我,请帮助。
答案 0 :(得分:3)
朋友们感谢您的帮助。我现在找到了。
您可以使用WITH CHECK OPTION CONSTRAINT
来解决此问题。
CREATE VIEW Emp_2
AS
SELECT Empid, Date_Joined, Salary
FROM employees
WHERE salary < 25000
WITH CHECK OPTION CONSTRAINT Emp_2_Salary_Constraint;
然后在您违反时会显示此错误。
SQL错误:ORA-01402:查看WITH CHECK OPTION where-clause违规
答案 1 :(得分:-1)
您必须在employees
表上添加约束。视图只是查询的表示。它没有已分配的存储,并且由于基础表没有任何此类约束,因此您可以插入该数据。所以设计和输出应该是应有的。