首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle SQL 异常处理

then --no_data_found使用 select 某字段,然后 into 的时候,该字段没有出。...关于异常的语法及定义: 什么是异常: PL/SQL用异常和异常处理器来实现错误处理 Oracle中出现错误的情形通常分为编译错误(compile-time error)和运行时错误(run-time...关键词开始异常处理部分 WHEN OTHERS 为最后的一条子句 异常块中,只有一个句柄会处理异常 关于异常捕获的函数: SQLCODE 返回错误代码 SQLERRM 返回与错误代码关联的消息...然后在外层执行步骤1:如果此语句最外层语句块,则该异常将被传播给调用环境 没有处理的异常将沿检测异常调用程序传播到外面,当异常被处理并解决或到达程序最外层传播停止。异常是自里向外逐级传递的。...,如果没有,就把你这些传入的字段,插入到表里, eg:只用两个字段来说明:empno、sal 入参1:123,1000,经过��断,myemp表里没有123这个empno,那么执行完存储过程,这个信息要插入到表里

60210

Oracle使用总结之异常篇

1.2.2 声明部分引发异常错误 1.3 异常错误处理编程 1.4 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件...1.1 异常处理概念 异常情况处理(EXCEPTION)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和自定义错误,由于PL/SQL程序块一旦产生异常而没有指出如何处理,程序就会自动终止整个程序运行...用户定义的异常错误是通过显式使用RAISE 语句来触发。当引发一个异常错误时,控制就转向到 EXCEPTION块异常错误部分,执行错误处理代码。 对于这类异常情况的处理,步骤如下: 1....1.2.1 执行部分引发异常错误 当一个异常错误执行部分引发,有下列情况: l 如果当前块对该异常错误设置了处理,则执行它并成功完成该块的执行,然后控制转给包含块。...1.4 PL/SQL 中使用 SQLCODE,SQLERRM异常处理函数 由于ORACLE 的错信息最大长度是512字节,为了得到完整的错误提示信息,我们可用 SQLERRM和 SUBSTR 函数一起得到错误提示信息

2K60
您找到你想要的搜索结果了吗?
是的
没有找到

PLSQL学习笔记-异常处理

一:预定义异常错误 先看代码: declare mytitle labor.xland.title%type; begin select title into mytitle from labor.xland...('没有找到数据'); end; 这段程序当检索到数据的时候就输出数据 检索不到数据即输出  没有找到数据 no_data_found 是一个预定义异常错误类型 更多预定义异常错误,请看: http:...//www.cnblogs.com/liulun/articles/1526177.html 二:非预定义异常错误 先看代码: declare v_sqlcode number; v_sqlerrm...; end; 这里提到了一个新的数据类型  exception pragma exception_init(name,errcode) 把错误号为-1400的错误赋值给v_exception 第二个when...子句中不能使用sqlcode等系统变量 三:自定义异常并抛出 先看代码 declare v_exception EXCEPTION; begin RAISE v_exception; exception

29630

Oracle-PLSQL学习

/* 判断用户从键盘输入的数字 1.如何使用if语句 2.接收一个键盘输入(字符串) */ set serveroutput on --接受一个键盘输入 --num:地址值,含义该地址上保存了输入的值...END LOOP; 实例代码 --使用while 循环打印数字的1-10 set serveroutput no declare --定义循环变量 pnum number:=1; begin while...END LOOP; 实例代码 --使用loop 循环打印1-10 set serveroutput no declare --定义变量 pnum number:=1; begin loop -- 退出条件...系统列外 No_data_found (没有找到数据) 实例 --系统例外:no_data_found set SERVEROUTPUT ON declare pename a.id%type;...) Zero_Divide (被零除) Value_error (算术或转换错误) Timeout_on_resource (等待资源发生超时) 自定义列外 定义变量,类型是 exception 使用

78430

PLSQL -->隐式游标(SQL%FOUND)

当执行select into ,insert update,delete,Oracle会隐含地打开游标,且该语句执行完毕或隐含地关闭 游标,因为是隐式游标,故SQL%ISOPEN总是false...SQL%ROWCOUNT 执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为,如果没有 成功,SQL%...SELECT INTO处理的结果包括两种种情况 查询结果返回单行,SELECT INTO被成功执行 查询结果没有返回行,PL/SQL将抛出no_data_found异常 查询结果返回多行,PL/SQL...将抛出too_many_rows 异常 对于上述两种异常发生,类似于普通异常处理,程序控制权转移到异常处理部分(如没有异常处理则程序中断)。...使用下面改进过的代码来执行,即可以将SQL游标属性判断放置到EXCEPTION部分 DECLARE v_ename emp.ename%TYPE; BEGIN SELECT ename INTO

1.3K30

Oracle存储过程详解(一)

大家好,又见面了,是你们的朋友全栈君。...唯一索引对应的列上有重复的值 INVALID_CURSOR 不合法的游标上进行操作 INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字 NO_DATA_FOUND 使用 select...LOGIN_DENIED PL/SQL 应用程序连接到 oracle 数据库,提供了不正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序没有连接 oralce 数据库的情况下访问数据.../SQL系统包 ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容 SELF_IS_NULL 使用对象类型 null 对象上调用对象方法 STORAGE_ERROR...SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子:

1.7K30

【DB笔试面试445】Oracle中的异常可以分为哪几类?

(2)当程序出现异常,程序立即暂停工作,跳转到EXCEPTION部分。使用WHEN … THEN来处理系统定义的异常。使用WHEN OTHERS THEN处理未定义的异常。...预定义异常大约有20多个,下表是一些常见的预定义异常: 表 5-3 Oracle预定义异常 错误号 异常错误信息名称 说明 ORA-01403 NO_DATA_FOUND SELECT INTO没有找到数据...使用预定义异常只能处理系统预定义的20多个Oracle错误,而当使用PL/SQL开发应用程序时,可能会遇到其它的一些Oracle错误。例如,PL/SQL块中执行DML语句,违反了约束规定等等。...Oracle提供了2个函数SQLCODE和SQLERRM用于返回错误信息: l SQLCODE:返回错误代码 l SQLERRM:返回与错误代码关联的消息 这样就可以错误日志表中记录程序执行过程中发生的错误信息了...当与一个异常相关的错误出现时,就会隐含触发该异常。用户定义异常是通过显式使用RAISE语句来触发。当触发一个异常,控制程序就转到异常块部分,执行错误处理代码

1.7K10

oracle与mysql的存储区别_存储过程和触发器的区别和联系

大家好,又见面了,是你们的朋友全栈君。...PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`; create procedure P_ADD_FAC( id_fac_cd varchar(100)) 1.创建存储过程如果存在同名的存储过程...CREATE FUNCTION `SD_ROLE_F_ROLE_FACS_GRP`( ii_role_int_key INTEGER(10) ) RETURNS varchar(1000) 1.创建函数如果存在同名的函数...详见注释. oracle中: NO_DATA_FOUND是游标的一个属性. 当select没有查到数据就会出现 no data found 的异常,程序不会向下执行....Mysql: 没有NO_DATA_FOUND这个属性.但可是使用FOUND_ROWS()方法得到select语句查询出来的数据.如果FOUND_ROWS()得到的值为0,就进入异常处理逻辑. 9.存储过程中调用存储过程方式的不同

1.2K10

Oracle PLSQL中异常高级特性

当我们输入存在的员工编号,程序能够正常返回结果;如果输入不存在ID,则select into语句会抛出没有返回行,进而使程序进入异常处理部分(本部分为举例),程序同样执行成功;当输入一个负数,if条件语句就会进入到...但是抛出的错误不是很好理解  - 我们可以使用EXCEPTION_INIT来对这个错误进行处理,首先我们得知道违反外键约束的这个Oracle错误代码“ORA-02292”  - 使用EXCEPTION_INIT...3,SQLCODE 和 SQLERRM  - 异常处理中,当异常的名称未知(比如上面1中RAISE_APPLICATION_ERROR),都可以使用others来进行异常的捕获处理;  - 由于others...所捕获的异常是未知的(也可以是已知的,但是程序中没有将其枚举出来),因此需要使用Oracle提供的两个内置函数SQLCODE、SQLERRM来针对others的异常进行处理:  - SQLCODE 会返回...PL/SQL procedure successfully completed. - 代码使用了raise_application_error,由于单纯的使用raise_application_error

62610

Oracle数据库,浅谈PLSQL异常处理

众所周知,程序的错误一般情况下分为两类:编译错误和运行时错误。其中运行时错误被称为异常。PL/SQL语句块中处理异常的部分即为异常处理部分。异常处理部分,可以指定当特定异常发生所采取的动作。...当输入的员工编号存在,输出员工姓名,当员工编号不存在,会有运行错误。...上述NO_DATA_FOUND即为Oracle预定义异常。 二、 用户自定义异常 通常,自己的程序里,也许需要处理与所写程序相关的问题。例如,在上个语句块中,需要输入员工编号。...但是,没有发生任何错误,因为变量v_empno被定义为数值类型。这时,你希望自定义异常来处理这种情况,这种类型的异常被称为用户自定义异常。使用该异常之前,必须首先进行声明。...综上所述,我们发现预定义异常的错误代码有名称,譬如上文提到的NO_DATA_FOUNG,而非预定义异常只有错误代码没有名称,如上文提到的ora-02292。

69220

PLSQL --> 异常处理(Exception)

1.预定义异常 ORACLE定义了他们的错误编号和异常名字,常见的预定义异常处理Oracle常见的错误 NO_DATA_FOUND SELECT ... INTO ......没有找到数据 DUL_VAL_ON_INDEX 试图一个有惟一性约束的列上存储重复值 CURSOR_ALREADY_OPEN 试图打开一个已经打开的游标 TOO_MANY_ROWS SELECT...,查询的结果是多值 ZERO_DIVIDE 零被整除 2.非预定义异常 ORACLE为它定义了错误编号,但没有定义异常名字。...对于自定义的异常处理需要显示的触发,其步骤如下 a.定义异常(declare部分进行定义) b.显示触发异常(执行BEGIN部分触发异常,使用RAISE语句) c.引用异常(EXCEPTION...该函数用于PL/SQL中定义错误消息,且只能在数据库端的子程序中使用(存储过程、函数、包、触发器),不能在匿名块和客户端的 子程序中使用 使用方法 RAISE_APPLICATION_ERROR

1.4K10

oracle补充

某些数据表的结构中,有些字段需要这种特征: 比如,对于某个学生数据表的学号关键字段,用户可以希望录入数据,能够自动在上一个记录的学号字段上自动加1等。...函数接受零个或多个输入参数,有一个返回值,返回值的数据类型创建函数定义用于返回特定的数据,当建立函数函数头部必须包含return子句,而在函数体内必须包含return语句返回的数据 需求:创建一个...:游标名[属性],例如:mycursor%isopen %isopen属性:该属性功能是测试游标是否打开,如果没有打开游标就使用fetch语句将提示错误 %found属性:该属性功能是测试前一个fetch...PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2); 里面的错误代码和内容,...下面介绍一些常用的系统事件属性函数,和建立各种事件触发器的方法,在建立系统事件触发器,我们需要使用事件属性函数,常用的事件属性函数如下: ?

3.1K30

PLSQL 编程(一)基础,变量,分支,循环,异常

使用记录数据类型变量,需要先在声明部分先定义记录的组成、记录的变量,然后执行部分引用该记录变量本身或其中的成员。  该类型可以包含一个或多个成员,每个成员类型可以不同。...对这种异常情况的处理,无需程序中定义,由ORACLE自动将其引发。     2. 非预定义 ( Predefined )错误    即其他标准的ORACLE错误。...; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||v_empno||...将其定义好的异常情况,与标准的ORACLE错误联系起来,使用EXCEPTION_INIT语句: PRAGMA EXCEPTION_INIT(, ); 3. ...PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。 --删除指定部门的记录信息,以确保该部门没有员工。

1.6K81

Java程序员的日常——存储过程知识普及

6 (缺点)不易移植和修改 使用存储过程封装业务逻辑将限制应用程序的可移植性;另外,如果更改参数或者返回的数据以及类型,需要修改相关的代码,比较繁琐。...:call stu_proc3(name,'001') 存储过程的异常处理 为了提高存储过程的健壮性,避免运行错误,建立存储过程,应该包含异常处理的部分。...预定义异常:PL\SQL提供的系统异常 费预定义异常:用于处理与预定义异常无关的Oracle错误 自定义异常:处理Oracle错误之外的一些异常 使用方法: create or replace procedure...内嵌的SQL语句不能讲字符穿换成数字 NO_DATA_FOUND 使用select into 未返回行,或者应用索引表未初始化的 TOO_MANY_ROWS 执行select into,结果集超过一行...VALUE_ERROR 赋值,变量长度不足以容纳实际数据 LOGIN_DENIED PL\SQL应用连接到oracle,提供了 不正确的用户名密码 NOT_LOGGED_ON PL\SQL应用程序没有连接

1.4K80

Oracle9i第2版中的UNT_FILE提高了文件输入输出(IO)功能。

注意,清单2中,还为新的UTL_FILE.DELETE_FAILED异常定义了一个明确的异常句柄。这种方法使能对失败的删除操作进行标记(例如,因为没有所需的权限而导致的失败。)...清单3中的例子使用了FRENAME来移动文件archive.zip。 再次说明,当你使用FRENAME,你应该定义一个异常句柄,它可以十分清楚地捕获重命名失败。...有了适当的函数,现在可以很容易地得到文件的大小,而不必为每个通过FGETATTER得到的属性声明一个变量,如下面的PL/SQL例子: how_big := flength ('DEVELOPMENT_DIR...你可以很容易地使用与查找文件长度(大小)相同的技巧(如清单4所示)创建函数,以得到块的大小,并返回一个简单的布尔值来确定文件是否存在。...写文件提高了控制能力 UTL_FILE的另一个新功能是PUT_LINE的“自动清洗(auto-flush)”特性。当你程序中将数据写出到一个文件中,它不会立即显示在那个文件中,以备读取。

1.2K40

PLSQL简介_什么是SQL数据库

大家好,又见面了,是你们的朋友全栈君 目录 PL/SQL简介 PL/SQL块 1、语法 2、匿名块 ---- PL/SQL简介 PL/SQL(Procedure Language/SQL...PL/SQL块 PL/SQL 中,最小的有意义的代码分组被称为块。块代码为变量声明和异常处理提供执行和作用域边界。PL/SQL 允许您创建匿名块和命名块。...并且每个PL/SQL程序必须至少有一行可执行代码,即使它是关键字NULL,这意味着没有操作。 EXCEPTION:PL/SQL块的异常处理部分。 它以关键字EXCEPTION开头。...这是您将捕获任何数据库或PL/SQL错误的地方。 END:每个PL / SQL块以关键字END结束。 2、匿名块 匿名块不保存在数据库中。它们非常适合创建测试单元。...exception when NO_DATA_FOUND then raise_application_error(-20000, 'No Data Found!')

68430
领券