可能不是很多人知道 RAISE_APPLICATION_ERROR 的用途是什么,虽然从字面上已经猜到这个函数是干什么用的。
其实 RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序。
RAISE_APPLICATION_ERROR 的声明:
PROCEDURE RAISE_APPLICATION_ERROR
( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
里面的错误代码和内容,都是自定义的。说明是自定义,当然就不是系统中已经命名存在的错误类别,是属于一种自定义事务错误类型,才调用此函数。
error_number_in 之容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。
error_msg_in 的长度不能超过 2K,否则截取 2K。
举个例吧:
阻止小于18岁的用户增加到数据库 employee 表中
CREATE OR REPALCE TRIGGER minimun_age_check
BEFORE INSERT ON employee
FOR EACH ROW
BEGIN
IF ADD_MONTHS( :new.birth_date, 18*12) > SYSDATE
THEN
RAISE_APPLICATION_ERROR(-20001, 'Employees must at least eighteen years of age.');
END IF;
END;
在客户端,你可以写一个类似下面的程序,来测试一下。
DECLARE
no_babies_allowed EXCEPTION;
PRAGMA EXCEPTION_INIT(no_babies_allowed, -20001);
BEGIN
INSERT INTO employee ....;
EXCEPTION
WHEN no_babies_allowed
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
------------------------------------------------------------------------------
DBMS_STANDARD包的RAISE_APPLICATION_ERROR过程,可以重新定义异常错误消息,它为应用程序提供了一种与ORACLE交互的方法。语法如下
RAISE_APPLICATION_ERROR(errorNumber,errorString)
errorNumber是数值在-20000到-20999之间,errorString为自定义的错误信息。
如:
update jobs set job_title = v_newJobTitle where job_id = v_jobid;
if sql%notfound then
RAISE_APPLICATION_ERROR(-20167,'update failure!');
end if;
..........
当在sqlpus中测试时,一旦没有要更新的行,则抛出这样的异常:
ORA-20167: update failure!
分享到:
相关推荐
Oracle提供了多种方式来处理和抛出异常,包括由PL/SQL运行时引擎自动抛出、使用`RAISE`语句显式抛出,以及调用`RAISE_APPLICATION_ERROR`存储过程。 1. **通过PL/SQL运行时引擎抛出异常**: 这是最常见的异常处理...
RAISE_APPLICATION_ERROR(-20010, 'execute_system: Error while sending. Status=' || status); END IF; status := DBMS_PIPE.RECEIVE_MESSAGE(pipe_name, timeout); IF status <> 0 THEN RAISE_APPLICATION...
`raise_application_error`函数允许我们在程序中抛出具有负数异常号的用户定义错误,这些异常号通常在-20000到-20999之间,以避免与Oracle预定义的异常号冲突。 在实际开发中,自定义异常能够帮助我们提供更精确的...
raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); END IF; -- 2. Check for the character <<findchar>> ischar:=FALSE; FOR i IN 1.....
RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be less than $1500'); END check_salary; ``` 3. **定时器**: Oracle中的定时器通常指的是调度器(DBMS_SCHEDULER),这是一个强大的任务调度工具,可以安排...
RAISE_APPLICATION_ERROR(-20001, '页数超出范围'); END IF; -- 构造分页SQL v_sql := 'SELECT * FROM (' || p_sql || ') WHERE ROWNUM <= ' || p_page * p_pageSize; v_sql := v_sql || ' MINUS '; v_sql :=...
RAISE_APPLICATION_ERROR(-20003, '口令必须包含至少一个大写字母'); ELSIF NOT REGEXP_LIKE(password, '[0-9]') THEN RAISE_APPLICATION_ERROR(-20004, '口令必须包含至少一个数字'); ELSE RETURN TRUE; END ...
RAISE_APPLICATION_ERROR(-20001,'人为引发的异常'); select name into pname from products; exception when too_many_rows then dbms_output.put_line('错误'||SQLERRM); when others then dbms_output.put...
" checkbox="raise_application_eror(-20000,, '[#]'), null"> Substitution variable checkbox unchecked value now defaults to empty when 1 value is given DDL for indexes on virtual columns would specify ...
除了介绍限定IP访问的方法,本篇博客还涉及到了其他知识点,例如如何将信息写入到Oracle的告警日志中,以及RAISE_APPLICATION_ERROR函数不能抛出错误到客户端环境的问题。告警日志记录了数据库的重要事件,包括错误...
8 raise_application_error(-20001, 'Password must be at least 6 characters long'); 9 END IF; 10 INSERT INTO passwd_changed VALUES (username, old_password, password); 11 RETURN TRUE; 12 END; ``` 该函数...
RAISE_APPLICATION_ERROR(-20001, '入学时间不能晚于当前时间'); END IF; END; ``` 通过以上介绍,我们可以看到Oracle中的存储过程、函数和触发器都是强大的工具,它们能够帮助开发人员更高效地管理数据库,并...
RAISE_APPLICATION_ERROR(-20001, 'Salary is too high'); END IF; END my_trigger; 3.2 触发器的类型 触发器可以分为两种:行级触发器和语句级触发器。行级触发器可以在每一行数据被操作时被触发,而语句级...
- **错误处理**:若为非工作日,则通过 `RAISE_APPLICATION_ERROR` 抛出错误,阻止 DML 操作执行。 #### 案例二:区分不同操作类型的工作日限制 **目标**:对于 EMP 表,在非工作日时,根据不同的 DML 操作抛出...
例如,创建一个在插入新学生记录时检查年龄是否合法的触发器,`CREATE TRIGGER check_age BEFORE INSERT ON students FOR EACH ROW WHEN (NEW.age < 18) BEGIN RAISE_APPLICATION_ERROR(-20000, 'Age must be at ...
用户可以创建自定义异常,通常使用RAISE或RAISE_APPLICATION_ERROR过程引发。自定义异常是通过在异常处理部分使用RAISE语句并指定异常名称来触发的。 5. RAISE_APPLICATION_ERROR使用 RAISE_APPLICATION_ERROR是一...
RAISE_APPLICATION_ERROR(-20001, '年龄不能为负数'); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('发生错误: ' || SQLERRM); END; ``` ##### 7 存储过程 存储过程是在数据库中存储的一组预编译...
Oracle中RAISE异常详解: 由三种方式抛出异常 1. 通过PL/SQL运行时引擎 2. 使用RAISE语句 3. 调用RAISE_APPLICATION_ERROR存储过程
总结来说,Oracle PL/SQL的异常处理机制包括`RAISE_APPLICATION_ERROR`、异常命名以及`WHEN OTHERS THEN`,这些高级特性使得开发者能够灵活应对各种运行时问题,提供更符合业务逻辑的错误处理。通过巧妙运用这些特性...