update和delete没有记录不会报异常,但是你自己通过全局参数sql%rowcount可以捕捉到,如果该参数=0时,表示没有修改或删除到记录
when no_data_found then /*RAISE_APPLICATION_ERROR(-20000, 'no data found');*/--抛出自定义的异常也行 raise program_error; end; 这样,当再执行到该句时,立刻转到异常处理块,抛出一个非NO_DATA_FOUND异常,调用者不认识,认为是一个错误或者很严重的异常,只能报错给客户端了。 对于【异常总是会抛出,只...
说明:这里说两个常见的异常no_data_found和too_many_rows,这两个异常多由select into语句触发。 举例: declare v_cnt number :=800; v_name emp.ename%type; begin select ename into v_name from emp where sal=v_cnt; dbms_output.put_line('姓名:' || v_name); exception when no_data_found the...
SELECT col INTO v_col FROM t_table WHERE condition 如果找不到数据,就会有 数据找不到的异常 有三种方式解决 1. 普通的异常捕获的方式 2. 通过表关联left join的方式 3. 通过max的方式 方法1 语法: BEGIN SELECT col INTO v_col FROM t_table WHERE condition EXCEPTION WHEN NO_DATA_FOUND THEN do s...
WHEN no_data_found THEN -- 处理无数据情况的代码逻辑 END; 在上述示例中,通过SELECT语句将查询结果存储到变量variable_name中。如果查询未返回任何数据,则会触发no_data_found异常,并跳转到EXCEPTION部分执行相应的逻辑代码。 3.2 使用存储过程进行异常处理: 除了使用上述的异常处理块外,我们还可以将整个过程封装在...
用自定义异常 DECLARE PRAGMA EXCEPTION_INIT(not_enough_values, -947);BEGIN WHEN not_enough_values THEN END;
NULL 当没有数据时,抛出空值 RAISE 是用来抛出异常的,没带参数的如你上面的这种,就是将当前的异常传到外部程序。
WHENNO_DATA_FOUND THEN DBMS_OUTPUT.put_line ('找不到数据'); END; 5.因为数据库中只有1的数据,该条语句会打印出“找不到数据”;如果把sql写成如下方式,则不会打印“找不到数据” ? 1 2 3 4 5 6 7 8 9 10 11 12 13 [sql] DECLARE ...
5.因为数据库中只有1的数据,该条语句会打印出“找不到数据”;如果把sql写成如下方式,则不会打印“找不到数据” 6.具体原因是由于在sql中使用了聚合函数,当使用聚合函数时,NO_DATA_FOUND是不起作用的,在这一点上也吃了小亏,不过问题不大,在此记录下问题。
说明:这里说两个常见的异常no_data_found和too_many_rows,这两个异常多由select into语句触发。 举例: declare v_cnt number :=800; v_name emp.ename%type; begin select ename into v_name from emp where sal=v_cnt; dbms_output.put_line('姓名:' || v_name); exception when no_data_found the...