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;      在包体中定义的标识符是私有结构,在包的外部不可见      在包体中先定义私有变量和子程序,后定义公共子程序

原创粉丝点击