友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

oracle从入门到精通(PDF格式)-第24章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



        。。。。。。。。。。。;  

        when others then  

        statement1;  

        statement2;  

        。。。。。。。。。。。;             



9。非预定义异常:  



    有编号,没名称。需要先定义名称再扑捉;  

    (1)在 DECLARE 部分定义一个异常的名称;   exc_name EXCEPTION;  

    (2)把名称和异常编号连接起来;                   PARGMA EXCEPTION_INIT(exc_name;…exc_number); 

      



3、函数:  



    SQLCODE :返回错误编号  

    SQLERRM :返回错误信息  

  写入错误日志的内容: 用户,时间,对象,操作,错误编号,错误信息。  

    

     用户定义异常:  

            (1)命名;  

            (2)raise关键字在 BEGIN 后触发;  



                                   第 88 页,共 106 页 


…………………………………………………………Page 89……………………………………………………………

资源来自网络,仅供学习!                                                            Oracle 从入门到精通 



            (3)捕捉;  

     语法:  

    exception   

    when exception1 or exception2 then  

    statement1;  

    statement2;  

    。。。。。。。。;  

    when exception3 or exception4 then  

    statement1;  

    statement2;  

    。。。。。。。。。。。;  

    when others then  

    statement1;  

    statement2;  

    。。。。。。。。。。。;          

    

  能够判断出的异常放到 WHEN 语句中,将那些无法预测的异常放在 OTHERS 中做成错误日志表。  

  在程序内部的在程序内部捕捉,程序外部的程序外部捕捉,只有都没捕捉到,才会传到环境中。  

    

     抛出异常:  

    RAISE_APPLICATION_ERROR  

    RAISE_APPLICATION_ERROR(自定义错误编号,自定义信息);  

    不会被 EXCEPTION 捕捉到,而是直接回显到界面上给用户看到。  

    在 EXCEPTION 。。。WHEN 。。。THEN 之前或之中都可以使用。  

     函数:  

    不能独立出现,只能作为表达式来使用。  

    create 'or replace' function fun_name   

    '(parameter1 'mode' datatype;parameter2 'mode' datatype; 。。。)'  

    return datetype  

    is/as  

    pl/sql block;  

      

    只能返回一个且必须有一个返回类型。  

    在 pl/sql block 中必须有一个可以执行的 RETURN子句。  

    只允许接受 IN 模式的参数。  

    函数可以返回 BOOLEAN类型,但不能将返回 BOOLEAN 类型的函数应用到 SQL 语句中。    

      

     函数的限制:  

    只能出现查询语句;  

    不允许出现 DML 操作;  

    如果在对表 T 进行DML 语句操作调用函数 F,该函数 F 不能对编辑表 T 进行查询;  

    不允许出现 DDL 语句;  

  例:  

  create or replace function sal_m_fun(empl_sal number) return number is  

  Result number;  

  begin  



                                    第 89 页,共 106 页 


…………………………………………………………Page 90……………………………………………………………

资源来自网络,仅供学习!                                                              Oracle 从入门到精通 



    if empl_sal  print name  

            NAME  

            ………………………………………………………………………………… 

            King  

    

            SQL》 print sal  

    

               SAL  

            ……………………… 

                24000  

    

      

            begin  

             …Call the procedure  

             query_emp(p_id =》 :p_id;  

                   p_name =》 :p_name;  

                   p_salary =》 :p_salary;  

                       p_m =》 :p_m);  

               end;  

    

        3。  inout 先传入后传出,可以直接赋予默认值;    

    编辑并存储;  

    SHO ERR 查看编辑时错误的命令;  

    exec 执行存储过程命令;  

  删除:DROP procedure;  

      



5、管理 PL/SQL 程序块:  



管理 PL/SQL程序块:    

        在用户自己的方案下有 CREATE 权限  

        对于其他用户的方案有 CREATE ANY 权限  

  存储过程,函数和包需要执行权限,触发器不需要。                             

  当用户使用其他用户的存储过程或函数去访问其他用户的对象,  

  能否访问到对象取决与该存储过程或函数的拥有者的权限。  

  TUTHID CURRENT_USER 表示存储过程不依赖他的拥有者,而依赖与当前调用他的用户。   

  在 CREATE PROCEDURE 的最后添加。     

    

     查看信息:  

    user_objects;  

    user_source;  

    user_errors;  



                                    第 91 页,共 106 页 


…………………………………………………………Page 92……………………………………………………………

资源来自网络,仅供学习!                                                     Oracle 从入门到精通 



    query_emp;对过程的描述。          

    



6、包(package)  



  一组相关类型的变量,常量,游标,存储过程,函数的集合。  



1。组成:  



    包头:声明部分;只声明PUBLIC PROCEDURE/VARIABLE;  

    包体:程序实体,包含 PRIVATE PROCEDURE/VARIABLE 、PUBLIC PROCEDURE/VARIABLE 和 LOCAL  

  VARIABLE;     

  包头没有包体是可以独立存在的。  

    包头:  

    CREATE 'OR REPLACE' PACKAGE package_name  

    IS  

    public_type   

    PROCEDURE procdeure_name (parameter。。。。 );  

    END package_name;       

    包体:  

    CREATE 'OR REPLACE' PACKAGE BODY package_name  

    IS   

    private type and item declarations  

    subprogram bodies  

    end package_name;    



2。构建没有包头的包:  



    为了在整个会话中的全局变量设计。  

    如果其他会话访问的话,和定义时候的回话得到的包的值有可能是不一样的。  

  包体的部分可以通过 WRAP 程序加密。  

    

  只有局部过程和被打包的过程才能 OVERLOAD(重载)。  

    前项声明:  

    将过程或函数的名称和参数放在包体的头部声明;  

    

    建立一次性的过程:  

    就是在包体中插入了一个匿名块,在包体执行的时候,该匿名块一定会先执行一次该匿名块,  

    然后再执行包体中的其他部分。  



3。SQL中使用包函数的限制  



    函数中不能包含影响当前事务的语句;  

    如果在对表 T 进行DML 语句操作调用函数 F,该函数 F 不能对编辑表 T 进行查询;  

      

  包中变量的稳定性:  

  PUBLIC VARIABLE 发生改变的情况:  



                                 第 92 页,共 106 页 


…………………………………………………………Page 93……………………………………………………………

资源来自网络,仅供学习!                                                          Oracle 从入门到精通 



            重新建立会话  

            符合规则  



返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!