Oracle学习之常用对象(三)—异常&变量&存储过程
2016-02-13 17:31
633 查看
这一章,我们谈谈变量,异常和存储过程。对他们的使用语法进行描述。
1、一般变量
DECLARE
--声明变量
V_NAME VARCHAR2(30);
V_ADDRESS VARCHAR2(60);
V_PHONE NUMBER;
BEGIN
V_NAME := 'mayun'; --初始化变量
END;
2、记录型变量
DECLARE
TYPE peopleinfo IS RECORD
(
v_name VARCHAR2(30),
v_address VARCHAR2(50),
v_phone NUMBER
);
v_people_1 peopleinfo;--定义变量
3、ROWTYPE类型
v_people peopleinfo%ROWTYPE;--表peopleinfo中所有字段组成的类型
v_people_1 peopleinfo.name%TYPE;--表peopleinfo中name字段的类型
二、异常处理
首先,异常处理是为了处理我们可能遇到的问题。异常有预定义异常、非预定义还有用户自定义异常。
1、ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
2、非预定义异常即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,
然后由ORACLE自动将其引发。
3、用户定义异常是程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,
然后显式地在程序中将其引发。
平时,我用到的异常不多,常用的是预定义异常,其他的接触不多。
4、预定义实例
DECLARE
V_RESULT NUMBER;
V_EXCP VARCHAR2(50);
BEGIN
V_RESLUT := 100 / 0;
EXCEPTION
WHEN ZERO_DIVIDE THEN
V_EXCP := '除数为零!';
END;
5、非预定义实例
DECLARE
V_EXCP VARCHAR2(50);
V_NAME VARCHAR2(20);
2291_EXCP EXCEPTION; --定义异常情况
PRAGMA EXCEPTION_INIT(MY_2291_EXP, -2291); --把异常名称跟错误号关联
BEGIN
V_NAME := 'mayun';
UPDATE PEOPLEINFO SET NAME = V_NAME;
EXCEPTION
WHEN 2291_EXCP THEN
V_EXCP := '违反完整性约束,未找到父项关键字';
ROLLBACK;
END;
三、存储过程
存储过程是我们经常用到的数据处理方式,基本语法如下,具体处理的逻辑在代码块中实现。
/*创建存储过程*/
CREATE PROCEDURE SP_PEOPLEINFO(ACCT_MONTH VARCHAR2 IN,
V_RPT VARCHAR2 OUT) IS
BEGIN
V_SQL VARCHAR2(500);
V_SQL := 'create table test(t_id varcahr2(20),t_name varcahr2(30))';
V_SQL := 'drop table test';
END;
/*删除存储过程*/
DROP PROCEDURE SP_PEOPLEINFO;
1、一般变量
DECLARE
--声明变量
V_NAME VARCHAR2(30);
V_ADDRESS VARCHAR2(60);
V_PHONE NUMBER;
BEGIN
V_NAME := 'mayun'; --初始化变量
END;
2、记录型变量
DECLARE
TYPE peopleinfo IS RECORD
(
v_name VARCHAR2(30),
v_address VARCHAR2(50),
v_phone NUMBER
);
v_people_1 peopleinfo;--定义变量
3、ROWTYPE类型
v_people peopleinfo%ROWTYPE;--表peopleinfo中所有字段组成的类型
v_people_1 peopleinfo.name%TYPE;--表peopleinfo中name字段的类型
二、异常处理
首先,异常处理是为了处理我们可能遇到的问题。异常有预定义异常、非预定义还有用户自定义异常。
1、ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。
2、非预定义异常即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,
然后由ORACLE自动将其引发。
3、用户定义异常是程序执行过程中,出现编程人员认为的非正常情况。对这种异常情况的处理,需要用户在程序中定义,
然后显式地在程序中将其引发。
平时,我用到的异常不多,常用的是预定义异常,其他的接触不多。
4、预定义实例
DECLARE
V_RESULT NUMBER;
V_EXCP VARCHAR2(50);
BEGIN
V_RESLUT := 100 / 0;
EXCEPTION
WHEN ZERO_DIVIDE THEN
V_EXCP := '除数为零!';
END;
5、非预定义实例
DECLARE
V_EXCP VARCHAR2(50);
V_NAME VARCHAR2(20);
2291_EXCP EXCEPTION; --定义异常情况
PRAGMA EXCEPTION_INIT(MY_2291_EXP, -2291); --把异常名称跟错误号关联
BEGIN
V_NAME := 'mayun';
UPDATE PEOPLEINFO SET NAME = V_NAME;
EXCEPTION
WHEN 2291_EXCP THEN
V_EXCP := '违反完整性约束,未找到父项关键字';
ROLLBACK;
END;
三、存储过程
存储过程是我们经常用到的数据处理方式,基本语法如下,具体处理的逻辑在代码块中实现。
/*创建存储过程*/
CREATE PROCEDURE SP_PEOPLEINFO(ACCT_MONTH VARCHAR2 IN,
V_RPT VARCHAR2 OUT) IS
BEGIN
V_SQL VARCHAR2(500);
V_SQL := 'create table test(t_id varcahr2(20),t_name varcahr2(30))';
V_SQL := 'drop table test';
END;
/*删除存储过程*/
DROP PROCEDURE SP_PEOPLEINFO;
相关文章推荐
- 【PL/SQL】--导出oracle单表数据--drp204
- Oracle查看表空间使用情况
- 【翻译自mos文章】在Oracle 12c中建立用户--避免ORA-65096 or ORA-65049错误
- Oracle 12c 新特性---password expired 的用户会输出到alert日志中
- 从windows客户端sqlplus连接Oracle 12c PDB报错ORA-65162: The password has expired
- 【翻译自mos文章】Oracle GoldenGate 怎么在源头的传输进程和目的端的server/collector进程之间分配 端口?
- Navicat连接oracle,出现Only compatible with oci version 8.1 and&nb
- 【翻译自mos文章】OGG的集成捕捉模式支持Oracle database标准版么?
- 相当重要---部署OGG对Oracle Database 补丁的要求
- Oracle varchar2 length 分析
- 升级Oracle 10..2.0.1到Oracle 10.2.0.5
- Oracle第学习四天
- 【翻译自mos文章】Oracle GoldenGate 对IBM大型机 z/OS 2.1 和DB2 v11的支持
- Oracle数据库初始化参数standby_file_management可以在两个实例间不一样
- java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.setBlob(ILjava/io/InputStream
- Oracle 11g 关闭内存自动管理
- Oracle 11g 内存手动管理
- Oracle 内存参数调整
- Oracle基础查询综合示例
- Oracle 数据库安装之前,几篇务必参考的文章