创建具有一些约束的视图但在插入时不显示

时间:2017-07-25 06:01:23

标签: sql database oracle oracle12c

我在Oracle 12c中创建了一些带有一些约束的视图。但是当我插入违反约束的值时,也能够从视图中插入。这似乎是一个漏洞。

- 创建视图Emp_1

CREATE VIEW Emp_1
AS
SELECT Empid, Ename, Salary
FROM employees
WHERE salary < 25000

此视图仅显示薪水少于25000的员工。

但是当我插入薪水超过25000的员工时,View允许我插入(这是不正确的)。但是当我查询视图(这是正确的)时它不会出现

这是设计还是我可以做些什么来克服这个问题?

从技术上讲,这是一个可插入的视图。所以它允许插入。但从概念上讲,用户只能看到薪水低于25000的员工。因此,不允许插入超过条件的员工。

如果我错了请纠正我,请帮助。

2 个答案:

答案 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表上添加约束。视图只是查询的表示。它没有已分配的存储,并且由于基础表没有任何此类约束,因此您可以插入该数据。所以设计和输出应该是应有的。