创建存储过程oracle实例,Oracle存储过程的创建实例和调用实例

--编写一个存储过程,给emp表中添加数据。

--方法一:

create or replace procedure add_employee(

eno number,

name varchar2,

salary number,

job varchar2 default 'CLERK',

dno number

)

is

begin

insert into emp (empno,ename,sal,job,deptno) values (eno,name,salary,job,dno);

end;

--方法二:

create or replace procedure add_employee_1(

eno number,

name varchar2,

salary number,

job varchar2 default 'CLERK',

dno number

)

is

emp_null_error exception; --声明异常变量

pragma exception_init( emp_null_error, -1400 ); --把异常变量和异常编号-1400绑定.-非空约束

emp_no_deptno exception ; --声明异常变量

pragma exception_init ( emp_no_deptno, -2291 );--外键约束

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;

--调用存储过程

--在sql提示符下调用

--外键约束

SQL> exec add_employee( 1111,'MARY', 2000, 'MANAGER', 66 );

begin add_employee( 1111,'MARY', 2000, 'MANAGER', 66 ); end;

ORA-02291: 违反完整约束条件 (SCOTT.FK_DEPTNO) - 未找到父项关键字

ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10

ORA-06512: 在 line 1

--异常部门为空

SQL>  exec add_employee(1111,'MARY', 2000, 'MANAGER', null);

begin add_employee(1111,'MARY', 2000, 'MANAGER', null); end;

ORA-01400: 无法将 NULL 插入 ("SCOTT"."EMP"."DEPTNO")

ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10

ORA-06512: 在 line 1

--正确,按位置传参

SQL>  exec add_employee(1111,'MARY', 2000, 'MANAGER', 10);

PL/SQL procedure successfully completed

--雇员编号重复

SQL>  exec add_employee(1111,'MARYE', 3000, 'MANAGER', 20);

begin add_employee(1111,'MARYE', 3000, 'MANAGER', 20); end;

ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)

ORA-06512: 在 "SCOTT.ADD_EMPLOYEE", line 10

ORA-06512: 在 line 1

--正确,按名字传参

SQL>  exec add_employee(eno=>1112,name=>'MARYE', salary=>3000, job=>'MANAGER',dno=> 20);

PL/SQL procedure successfully completed

--混合传参

SQL>  exec add_employee(1113,name=>'MACLE', salary=>3000, job=>'CLERK',dno=> 20);

PL/SQL procedure successfully completed

--错误的混合传参

SQL>  exec add_employee(1113,name=>'MACLE', 3000, job=>'CLERK',dno=> 20);

begin add_employee(1113,name=>'MACLE', 3000, job=>'CLERK',dno=> 20); end;

ORA-06550: 第 1 行, 第 40 列:

PLS-00312: 一个定位相关参数没有说明其相关性

ORA-06550: 第 1 行, 第 7 列:

PL/SQL: Statement ignored

--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_1(7369,'MARAY',2010,'SALESMAN',66);

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值