/*============================================================
示例1 创建存储过程,完成添加雇员。
============================================================*/
--方法一:简单添加
create or replace procedure add_employee(
eno number, --输入参数,雇员编号
name varchar2,--输入参数,雇员名称
salary number,--输入参数,雇员薪水
job VARCHAR2 DEFAULT 'CLERK',--输入参数,雇员工种默认'CLERK'
dno number --输入参数,雇员部门编号
)
IS
begin
insert into emp (empno,ename,sal,job,deptno)values (eno,name,salary,job,dno);
end;
--方法二:增加异常处理功能
--如果雇员表中deptno列允许为空,则修改成不允许为空。如果该列已经不允许为空,则不需运行以下语句。
--alter table emp modify deptno not null;
create or replace procedure add_employee(
eno number, --输入参数,雇员编号
name varchar2,--输入参数,雇员名称
salary number,--输入参数,雇员薪水
job VARCHAR2 DEFAULT 'CLERK',--输入参数,雇员工种默认'CLERK'
dno number --输入参数,雇员部门编号
)
IS
emp_null_error EXCEPTION; --声明异常变量
PRAGMA EXCEPTION_INIT(emp_null_error, -1400);--非预定义异常,前提:deptno列非空。插入空值会报错
emp_no_deptno EXCEPTION; --声明异常变量
PRAGMA EXCEPTION_INIT(emp_no_deptno, -2291);--非预定义异常,前提:deptno列建立外键约束,插入部门编号不在部门表中会报错
begin
insert into emp (empno,ename,sal,job,deptno)values (eno,name,salary,job,dno);
exception
when DUP_VAL_oN_INDEX then
RAISE_APPLICATION_ERROR(-20000,'该雇员已存在');
when emp_null_error then
RAISE_APPLICATION_ERROR(-20001,'部门编号不能为空');
when emp_no_deptno then
RAISE_APPLICATION_ERROR(-20002,'不存在该部门编号');
end;