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,那么执行完存储过程,这个信息要插入到表里
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 函数一起得到错误提示信息
一:预定义异常错误 先看代码: 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
/* 判断用户从键盘输入的数字 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 使用
当执行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
大家好,又见面了,我是你们的朋友全栈君。...唯一索引对应的列上有重复的值 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) 例子:
(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语句来触发。当触发一个异常时,控制程序就转到异常块部分,执行错误处理代码。
大家好,又见面了,我是你们的朋友全栈君。...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.在存储过程中调用存储过程方式的不同
当我们输入存在的员工编号时,程序能够正常返回结果;如果输入不存在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
众所周知,程序的错误一般情况下分为两类:编译错误和运行时错误。其中运行时错误被称为异常。PL/SQL语句块中处理异常的部分即为异常处理部分。在异常处理部分,可以指定当特定异常发生时所采取的动作。...当输入的员工编号存在时,输出员工姓名,当员工编号不存在时,会有运行错误。...上述NO_DATA_FOUND即为Oracle预定义异常。 二、 用户自定义异常 通常,在自己的程序里,也许需要处理与所写程序相关的问题。例如,在上个语句块中,需要输入员工编号。...但是,没有发生任何错误,因为变量v_empno被定义为数值类型。这时,你希望自定义异常来处理这种情况,这种类型的异常被称为用户自定义异常。在使用该异常之前,必须首先进行声明。...综上所述,我们发现预定义异常的错误代码有名称,譬如上文提到的NO_DATA_FOUNG,而非预定义异常只有错误代码,没有名称,如上文提到的ora-02292。
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等。...函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义用于返回特定的数据,当建立函数时,在函数头部必须包含return子句,而在函数体内必须包含return语句返回的数据 需求:创建一个...:游标名[属性],例如:mycursor%isopen %isopen属性:该属性功能是测试游标是否打开,如果没有打开游标就使用fetch语句将提示错误 %found属性:该属性功能是测试前一个fetch...PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2); 里面的错误代码和内容,...下面介绍一些常用的系统事件属性函数,和建立各种事件触发器的方法,在建立系统事件触发器时,我们需要使用事件属性函数,常用的事件属性函数如下: ?
5.在存储过程中,关于出现null的问题 假设有一个表A,定义如下: ? 如果在存储过程中,使用如下语句: ?...给变量赋值 5, 在代码中抛异常用 raise+异常名 以命名的异常 命名的系统异常 产生原因 ACCESS_INTO_NULL...未定义对象 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时 COLLECTION_IS_NULL...INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字 NO_DATA_FOUND 使用 select into...oracle 数据库时,提供了不 正确的用户名或密码 NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下 访问数据 PROGRAM_ERROR
在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。 该类型可以包含一个或多个成员,每个成员类型可以不同。...对这种异常情况的处理,无需在程序中定义,由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 块的异常情况处理部分对异常情况做出相应的处理。 --删除指定部门的记录信息,以确保该部门没有员工。
大家好,又见面了,我是你们的朋友全栈君。...NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION...– 错误 但是挑出的表中的字段可以取别名 2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。...select…into…语法时,必须先确保数据库中有该条记录,否则会报出”no data found”异常。...可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select…into… 4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过
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应用程序在没有连接
注意,在清单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 while 条件 loop ..... end loop; 当条件满足时,执行循环体,不满足时,退出循环体。...推荐使用第二种,因为在控制游标的时候比较方便。...系统例外 比如: - No_data_found 没有找到数据 - Too_many_rows select..into语句匹配多个行 - Zero_Divide 被零除 - Value_error...算数或转换错误,算术错误比如说负数开平方 - Timeout_on_resource 在等待资源时发生超时,常见于分部署数据库。
begin /*执行部分---要执行的pl/sql语句---要执行的pl/sql语句和sql语句*/ exception /*例外处理部分---处理运行的错误...2.3、pl/sql的例外处理 在上面的实例代码中存在一个问题,当我们输入的编号(empno),在emp表中不存在时,那么程序就会报错,当我输入42345345时,程序就会报以下错误, ?...当我们需要程序变的更友好一点时,我们就需要对这个异常进行处理,代码如下: declare v_name varchar2(5); v_sal number(7,2); begin select ename...v_sal from emp where empno=&no; dbms_output.put_line('当前用户名是:'||v_name||'其年薪是:'||v_sal); exception when no_data_found
大家好,又见面了,我是你们的朋友全栈君 目录 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!')
领取专属 10元无门槛券
手把手带您无忧上云