我想创建一个过程来帮助我在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的唯一性,如果没有要求,我想为此做一个例外。我可以请求你的帮助!我试过这么多次,但仍然没有解决。请帮忙!
由于
答案 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;