示例11 调用存储过程

本文介绍如何使用SQL命令及PL/SQL来调用存储过程,并演示了不同参数传递方式及其可能引发的异常情况。通过具体的例子,读者可以了解到如何正确地调用存储过程以及如何处理调用过程中可能出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




/*============================================================
                       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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值