Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查部门名称的唯一性_Sql_Plsql - Fatal编程技术网

Sql 检查部门名称的唯一性

Sql 检查部门名称的唯一性,sql,plsql,Sql,Plsql,我想制定一个程序,帮助我在Departments表中添加新行。我必须插入部门id、部门名称、位置id和经理id。我使用该代码成功完成了此操作: create or replace PROCEDURE add_depar( p_name VARCHAR2, p_mgr NUMBER, p_loc NUMBER) IS BEGIN INSERT INTO DEPARTMENTS (department_id, department_name, manager_id, locati

我想制定一个程序,帮助我在Departments表中添加新行。我必须插入部门id、部门名称、位置id和经理id。我使用该代码成功完成了此操作:

create or replace PROCEDURE add_depar(
    p_name VARCHAR2, p_mgr NUMBER, p_loc NUMBER) IS
BEGIN
  INSERT INTO DEPARTMENTS (department_id,
    department_name, manager_id, location_id)
  VALUES (DEPARTMENTS_SEQ.NEXTVAL, p_name, p_mgr, p_loc);
  DBMS_OUTPUT.PUT_LINE('Added Dept: '|| p_name);
EXCEPTION
 WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('Err: adding dept: '|| p_name);
END;
现在我想检查部门名称的唯一性,如果没有满足要求,我想破例。我可以请你帮忙吗!我已经试过很多次了,但仍然没有解决。请帮忙


谢谢

如果您希望部门名称是唯一的,请添加一个约束/唯一索引,并让数据库完成以下工作:

create unique index unq_department_name on department(name);

最好让数据库进行验证,因为数据库将确保更新和插入以及多个并发事务的一致性。

最简单最有效的方法是在department.name上添加一个唯一的索引,如@Gordon所述,然后添加一个DUP_VAL_on_索引异常。看起来像这样-

EXCEPTION
 WHEN dup_val_on_index THEN
  [exception handling];
 WHEN others THEN
  DBMS_OUTPUT.PUT_LINE('Err: adding dept: '|| p_name);
END;

您只想知道名称是否唯一,还是想阻止插入非唯一名称?我想查看部门名称是否唯一,如果有同名部门,则必须引发异常并将新行放入新表中-错误\u。如果没有同名的部门,则必须将该行放在Departments表中。我用这个代码调用这个过程:add_depar'Media',1001800;在这个过程中,我只想检查是否有同名的部门,如果有,我想把我的行放到Departments表中,如果没有,我想把我的行放到Error\u department表中。我用这个代码调用这个过程:add_depar'Media',1001800;你认为我必须创建一个唯一的索引吗?@Kaloyan。如果希望部门名称在表中是唯一的,那么让数据库来执行该操作。我不希望部门名称是唯一的,我只想检查是否有同名的部门。例如,若并没有名为“介质”的部门,则该行应进入“部门”表,若并没有,则应进入“错误离开”表。我在想我可以使用存在,但不确定我如何才能做到这一点。我可以请你帮忙吗!你好。我设法完成了这项任务。现在我想知道如何对location_id和manager_id执行相同的操作。请记住location_id来自table LOCATIONS,manager_id来自table EMPLOYEES。请看一下我的代码:创建或替换过程添加部门名称VARCHAR2,部门经理编号,部门loc编号开始合并到部门d使用选择部门名称部门名称,p_经理\u id,p_loc location \u id来自大写的双s。部门名称=大写的。部门名称如果不匹配,则插入值部门顺序。下一步,美国部门名称、美国经理id、美国地点id;如果sql%rowcount=0,则在错误中插入depa值departments\u seq.nextval、p\u name、p\u mgr、p\u loc;如果结束;终止这是代码,因为我不能将其作为注释来编写如何使用异常修改代码:如果不匹配,则插入值s.department\u id、s.department\u name、s.manager\u id、,美国的地理位置;如果sql%rowcount=0,则将p_id、p_名称、p_mgr、p_loc;如果结束;