pl/sql(2)
来源:互联网 发布:数据库用接口d 编辑:程序博客网 时间:2024/05/15 01:14
三:异常处理: 1:在Oracle中有三种异常:预定义异常(有名字)、未定义一场(无名)、自定义异常 2:异常捕获: exception when exception1 thenstatement1; WHEN OTHERS(捕获所有异常)thenstatement1; 3:预定义异常异常情况名 错误代码 描述DUP_VAL_ON_INDEX ORA-00001 试图更新或插入重复记录INVALID_CURSOR ORA-01001 非法游标操作INVALID_NUMBER ORA-01722 字符串向数字转换失败NO_DATA_FOUND ORA-01403 执行的SELECT没有查到数据TOO_MANY_ROWS ORA-01427 未使用游标,SELECT语句返回了多行数据VALUE_ERROR ORA-06502 出现数字、数据转换、字符串或限制型错误ZERO_DIVIDE ORA-01476 被零除 4:捕获异常的函数 SQLCODE(readonly) 返回Oracle的错误代码 SQLERRM(readonly) 返回和错误值相关联的信息 SQLCODE值说明 0 没有异常 100 NO_DATA_FOUND异常 负数其它Oracle错误号四:创建存储过程 1:CREATE [OR REPLACE] PROCEDURE procedure_name (parameter1 in/out/in out datatype1, parameter1 in datatype default 7369, (当是传进参数时可以使用默值)parameter2 in/out/in out datatype1 )is可以声明其他变量beginexceptionend procedure_name;过程的调用: 过程传参: 1:必须严格按照参数顺序procedure_name(变量1,变量2(对应参数),。。。)2:procedure_name(parameter->变量,可以不考虑顺序)五:创建函数: 1: create OR REPLACE FUNCTION function_name (parameter1 datatype1 ) return 返回值类型 is beginreturn value; end; 在一个表上的UPDATE或DELETE语句中调用的函数不能查询及更新‘同一个表’. 从SQL 语句中调用的函数不能包含结束事务的语句.例如:CREATE OR REPLACE FUNCTION query_call_sql(a NUMBER) RETURN NUMBERISs NUMBER;BEGINSELECT sal INTO sFROM empWHERE empno = 7839;RETURN (s + a);END;从SQL中调用函数的限制(续)UPDATE empSET sal = query_call_sql(100)WHERE empno = 7839; 2:过程与函数的区别: 过程 |函数 作为一个独立的PL/SQL |语句执行作为表达式的一部分调用 在规格说明中不包含RETURN子句|必须在规格说明中包含RETURN子句 可以返回很多值 |必须返回单个值 不用包含RETURN 语句 |必须包含至少一条RETURN六:包的声明: 1:CREATE [OR REPLACE] PACKAGE package_name IS|AS 公共变量、异常、游标、子程序等声明 END package_name; 2: 保存包声明和包体到两个不同的SQL 文件中,方便以后修改包 包声明可以没有包体单独存在,但包体不能没有包的声明而单独存在 3:CREATE OR REPLACE PACKAGE BODY package_name IS 私有的变量、静态变量、游标、异常、类型、子程序、 子程序体 END package_name; 在包体中定义的标识符是私有结构,在包的外部不可见 在包体中先定义私有变量和子程序,后定义公共子程序