/*============================================================
SQL命令调用存储过程
============================================================*/
--异常部门不存在
-- EXEC add_employee(1111,'MARY',2000,'MANAGER',66);
--异常部门为空
--EXEC add_employee(1111,'MARY',2000,'MANAGER',null);
--正确,按位置传参
--EXEC add_employee(1111,'MARY',2000,'MANAGER',10);
--异常雇员编号重复
--EXEC add_employee(1111,'MARY',2000,'MANAGER',10);
--正确,按名字传参
--EXEC add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>1112, job=>'MANAGER');
--正确,混合方法传参
--EXEC add_employee(1113,dno=>10,name=>'MARY',salary=>2000,job=>'MANAGER');
--错误,混合方法传参
--EXEC add_employee(1113,dno=>10,'MARY',salary=>2000,job=>'MANAGER');
--正确,默认值
--EXEC add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>1114);
--正确,默认值
--EXEC add_employee(1115,dno=>10,name=>'MARY',salary=>2000);
--错误,默认值
--EXEC add_employee(1116,'MARY',2000, ,10);
/*============================================================
PL/SQL调用存储过程
============================================================*/
--方法一:用PL/SQL按位置调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--异常部门不存在
add_employee(2111,'MARY',2000,'MANAGER',66);
--异常部门为空
add_employee(2111,'MARY',2000,'MANAGER',null);
--正确,按位置传参
add_employee(2111,'MARY',2000,'MANAGER',10);
--异常雇员编号重复
add_employee(2111,'MARY',2000,'MANAGER',10);
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;
--方法二:用PL/SQL按名字调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--异常部门不存在
add_employee(dno=>66,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--异常部门为空
add_employee(dno=>null,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--正确,按位置传参
add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--异常雇员编号重复
add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;
--方法三:用PL/SQL混合方法调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--正确,混合方法传参
add_employee(3111,dno=>10,name=>'MARY',salary=>2000,job=>' MANAGER ');
--错误,混合方法传参
--add_employee(3111,dno=>10,'MARY',salary=>2000,job=>' MANAGER ');
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;
/*============================================================
SQL命令调用存储过程
============================================================*/
--异常部门不存在
-- EXEC add_employee(1111,'MARY',2000,'MANAGER',66);
--异常部门为空
--EXEC add_employee(1111,'MARY',2000,'MANAGER',null);
--正确,按位置传参
--EXEC add_employee(1111,'MARY',2000,'MANAGER',10);
--异常雇员编号重复
--EXEC add_employee(1111,'MARY',2000,'MANAGER',10);
--正确,按名字传参
--EXEC add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>1112, job=>'MANAGER');
--正确,混合方法传参
--EXEC add_employee(1113,dno=>10,name=>'MARY',salary=>2000,job=>'MANAGER');
--错误,混合方法传参
--EXEC add_employee(1113,dno=>10,'MARY',salary=>2000,job=>'MANAGER');
--正确,默认值
--EXEC add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>1114);
--正确,默认值
--EXEC add_employee(1115,dno=>10,name=>'MARY',salary=>2000);
--错误,默认值
--EXEC add_employee(1116,'MARY',2000, ,10);
/*============================================================
PL/SQL调用存储过程
============================================================*/
--方法一:用PL/SQL按位置调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--异常部门不存在
add_employee(2111,'MARY',2000,'MANAGER',66);
--异常部门为空
add_employee(2111,'MARY',2000,'MANAGER',null);
--正确,按位置传参
add_employee(2111,'MARY',2000,'MANAGER',10);
--异常雇员编号重复
add_employee(2111,'MARY',2000,'MANAGER',10);
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;
--方法二:用PL/SQL按名字调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--异常部门不存在
add_employee(dno=>66,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--异常部门为空
add_employee(dno=>null,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--正确,按位置传参
add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
--异常雇员编号重复
add_employee(dno=>10,name=>'MARY',salary=>2000,eno=>2112, job=>' MANAGER ');
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;
--方法三:用PL/SQL混合方法调用添加雇员存储过程
DECLARE
emp_20000 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20000, -20000);
emp_20001 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20001, -20001);
emp_20002 EXCEPTION;
PRAGMA EXCEPTION_INIT(emp_20002, -20002);
BEGIN
--正确,混合方法传参
add_employee(3111,dno=>10,name=>'MARY',salary=>2000,job=>' MANAGER ');
--错误,混合方法传参
--add_employee(3111,dno=>10,'MARY',salary=>2000,job=>' MANAGER ');
EXCEPTION
WHEN emp_20000 THEN
DBMS_OUTPUT.PUT_LINE('emp_20000雇员编码不能重复');
WHEN emp_20001 THEN
DBMS_OUTPUT.PUT_LINE('emp_20001部门编码不能为空');
WHEN emp_20002 THEN
DBMS_OUTPUT.PUT_LINE('emp_20002不存在该部门编号');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('出现了其他异常错误');
END;