oracle数据库goto语句,oracle学习笔记(十六) PL/SQL 异常和goto语句

PL/SQL 异常和goto语句

异常

预定义异常

oracle常见预定义异常:

错误号

异常错误信息名称

说明

ORA-0001

DUP_VAL_ON_INDEX

试图破坏一个唯一性限制

ORA-0051

TIMEOUT_ON_RESOURCE(少用)

在等待资源时发生超时

ORA-0061

TRANSACTION_BACKED_OUT(少用)

由于发生死锁事务被撤消

ORA-1001

INVALID_CURSOR

试图使用一个未打开的游标

ORA-1012

NOT_LOGGED_ON(少用)

没有连接到ORACLE

ORA-1017

LOGIN_DENIED(少用)

无效的用户名/口令

ORA-1403

NO_DATA_FOUND

SELECT INTO没有找到数据

ORA-1422

TOO_MANY_ROWS

SELECT INTO 返回多行

ORA-1476

ZERO_DIVIDE

试图被零除

ORA-1722

INVALID_NUMBER

转换一个数字失败

OTHERS(总是写在最后)

其它的异常(总是放在异常处理块的最后)

Oracle内置有两个与异常有关的函数

SQLCODE 返回Oracle的错误代码

SQLERRM 返回Oracle的错误消息

--使用预定义异常

declare

v_empno employee.empno%type;

rec_emp employee%rowtype;

begin

v_empno := &请输入员工编号;

select * into rec_emp from employee;-- where empno=v_empno;

dbms_output.put_line('编号:'||rec_emp.empno||', 姓名:'||rec_emp.ename);

--异常处理

exception

when NO_DATA_FOUND then --数据未找到

dbms_output.put_line('数据未找到,原因:'||SQLCODE||','||SQLERRM);

when TOO_MANY_ROWS THEN

dbms_output.put_line('数据过多,不能给变量赋值,原因:'||SQLCODE||','||SQLERRM);

when others then

dbms_output.put_line('未知异常,原因:'||SQLCODE||','||SQLERRM);

end;

/

自定义异常

声明异常: 变量名 exception;

抛出异常: raise 变量名;

处理异常:exception

--问题:如果某员工没有奖金时抛出“无奖金异常”

declare

v_empno employee.empno%type := &请输入编号;

rec_emp employee%rowtype;

ex_no_comm exception; --定义无奖金异常

begin

select * into rec_emp from employee where empno=v_empno;

if (rec_emp.comm is null or rec_emp.comm=0) then

raise ex_no_comm;--2. 抛出异常

end if;

--3. 异常处理

exception

when ex_no_comm then

dbms_output.put_line('无奖金异常');

end;

/

异常交给java处理(了解)

使用SQL中的函数RAISE_APPLICATION_ERROR(error_number, error_message)即可把异常交给java处理。 java中通过try捕获到SQLException,之后通过SQLException的getCode和getMessage方法来获得

goto语句

--若XXX员工的工资小于奖金的 3倍,则为该员工的工资增加30%。

declare

v_empno employee.empno%type;

v_sal employee.sal%type;

v_comm employee.comm%type;

begin

v_empno := &请输入员工编号;

select sal,comm into v_sal,v_comm from employee where empno=v_empno;

if v_sal

goto updating;

end if;

--定义标号

<>

update employee set sal=sal+sal*0.3 where empno=v_empno;

commit;

<>

null; --空语句,什么都不做

end;

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值