Ï

编写ORACLE存储过程

    整体结构

    or replace若存在则替换
    IN输入参数
    OUT输出参数
    IN OUT即可做输入参数,也可做输出参数
    %type与表的字段同类型
    default赋默认值(out参数不能赋默认值)
    过程中参数类型不用指定大小,而声明的变量类型要指定大小。如:字符类型varchar2(30)声明时需要指定30
    AS|IS没有区别,任选一个即可
    exception异常处理[可选]

    逻辑判断

    IF判断

    FOR循环:

    WHILE循环:

     

    异常处理

    系统异常 异常原因
    access_into_null 未定义对象
    case_not_found case中若未包含相应的when,并且没有设置
    collection_is_null 集合元素未初始化
    curser_already_open 游标已经打开
    dup_val_on_index 唯一索引对应的列上有重复的值
    invalid_cursor 在不合法的游标上进行操作
    invalid_number 内嵌的 sql 语句不能将字符转换为数字
    no_data_found 使用 select into 未返回行,或应用索引表未初始化的
    too_many_rows 执行 select into 时,结果集超过一行
    zero_divide 除数为 0
    subscript_beyond_count 元素下标超过嵌套表或varray的最大值
    subscript_outside_limit 使用嵌套表或 varray 时,将下标指定为负数
    value_error 赋值时,变量长度不足以容纳实际数据
    login_denied pl/sql 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码确的用户名或密码
    not_logged_on pl/sql 应用程序在没有连接 oralce 数据库的情况下访问数据问数据
    program_error pl/sql 内部问题,可能需要重装数据字典& pl./sql系统包统包
    rowtype_mismatch 主游标变量与 pl/sql 游标变量的返回类型不兼容
    self_is_null 使用对象类型时,在 null 对象上调用对象方法
    storage_error 运行 pl/sql 时,超出内存空间
    sys_invalid_id 无效的 rowid 字符串
    timeout_on_resource oracle 在等待资源时超时

     

    自定义异常

     

    goto语句:

    Oracle中没有continue关键字,在loop中可以用goto语句实现同样的效果。
    goto会增加程序复杂度,可读性变差使程序不易控制和维护。
    << >>后面不能直接跟EXCEPTION这种关键字类的语句,要用NULL把标签跟关键字隔开。类似的关键字还有END LOOP之类的,等等。
     

     

    注释

    – – 单行注释
    /* */ 多行注释

    注释必须在create [or replace] procedure之内,否则不能保存。
     

    其他问题

    DBMS_OUTPUT.put_line()打印方法可用于跟踪调试
    PL/SQL DEVELOPER自带调试功能

    转载请注明:风尘 » 编写ORACLE存储过程

    喜欢 2

已经有2 人抢在你前面了~