检查部门名称

时间:2015-12-27 13:59:38

标签: sql plsql

我想创建一个过程来帮助我在Departments表中添加一个新行。我必须插入department_id,department_name,location_id和manager_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;

现在我想检查department_name的唯一性,如果没有要求,我想为此做一个例外。我可以请求你的帮助!我试过这么多次,但仍然没有解决。请帮忙!

由于

2 个答案:

答案 0 :(得分:2)

您希望部门名称是唯一的,然后添加约束/唯一索引并让数据库完成工作:

create unique index unq_department_name on department(name);

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

答案 1 :(得分:0)

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

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