问题描述
在样本数据集emp和dept。
如何防止交互式网格中列的值重复
案例-1
-------
emp表中emp名称的要求对于同一部门不应重复。例如,部门10-帐户我用员工id 8972输入了sam,并为同一部门输入了9872 sam。
我该怎么办?我尝试在过程交互式网格-自动处理和写plsql检查插入和更新,如果okey,然后我手动插入记录。它阻止插入。但是当我以相同的值更新时,它完成了。任何替代解决方案。
在数据库级别,我无法强制执行约束。
这是示例示例。在当前的业务应用程序中,我在公司有这个解决方案。业务应用程序我无法在这里解释,因此使用示例示例我解释了我的问题。
如何防止交互式网格中列的值重复
案例-1
-------
emp表中emp名称的要求对于同一部门不应重复。例如,部门10-帐户我用员工id 8972输入了sam,并为同一部门输入了9872 sam。
我该怎么办?我尝试在过程交互式网格-自动处理和写plsql检查插入和更新,如果okey,然后我手动插入记录。它阻止插入。但是当我以相同的值更新时,它完成了。任何替代解决方案。
在数据库级别,我无法强制执行约束。
这是示例示例。在当前的业务应用程序中,我在公司有这个解决方案。业务应用程序我无法在这里解释,因此使用示例示例我解释了我的问题。
专家解答
任何依靠前端验证来阻止重复的方法都注定要失败。
虽然您可以创建一个流程来检查表中是否已经有员工和部门的行,如下所示:
如果两个人同时运行该进程,则失败。
您只能查看其他事务提交的更改。因此,如果第二个在第一次提交之前开始,它们都将 “此emp/dept_id组合没有现有行-可以插入”。
所以两者都可以插入该行,让你有重复。
为了避免这种情况,您必须在 (emp_id,dept_id) 上创建唯一约束。
如果你想做insert-If-不存在; 更新-if-exists逻辑,你可以使用合并。但这仍然受到上述并发问题的困扰。
虽然您可以创建一个流程来检查表中是否已经有员工和部门的行,如下所示:
insert into employees ( emp_id, dept_id )
select :p1_emp_id, :p1_dept_id
from dual
where not exists (
select * from employees
where emp_id := :p1_emp_id
and dept_id := :p1_dept_id
);如果两个人同时运行该进程,则失败。
您只能查看其他事务提交的更改。因此,如果第二个在第一次提交之前开始,它们都将 “此emp/dept_id组合没有现有行-可以插入”。
所以两者都可以插入该行,让你有重复。
为了避免这种情况,您必须在 (emp_id,dept_id) 上创建唯一约束。
如果你想做insert-If-不存在; 更新-if-exists逻辑,你可以使用合并。但这仍然受到上述并发问题的困扰。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




