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

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

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






            重新建立会话  

            符合规则  



4。与开发相关的系统包:  



     DBMS_SQL  

        (1)能过生成动态的 SQL 语句;  

        (2)能过执行 DDL 语句;  

     包使用的主要步骤:  

            OPEN_DURSOR  

            PARSE  

            BIND_VARIABLE  

            EXECUTE  

            FETCH_ROWS  

            CLOSE_CURSOR  

    EXECUTE IMMEDIATE  

     

        EXECUTE IMMEDIATE dynamic_string  

            'INTO {define_variable  

                '; define_variable' 。。。 | record}'  

        'USING 'IN|OUT|IN OUT' bind_argument  

                   '; 'IN|OUT|IN OUT' bind_argument' 。。。 ';  

     DBMS_DDL  

        ALTER_PILE(object_type;owner;object_name);强制编辑  

     DBMS_JOB   

        设置用户的任务;  

        在某个指定的时刻执行一定的操作;  

        手动强制执行;  

        挂起任务;            

        提交  

        删除  

        修改  

        要执行什么,可以跟语句或过程  

        下一次的执行时间  

        任务执行的时间间隔  

        挂起  

        手动强制执行  

        查看:  

             USER_JOBS;   

     DBMS_OUTPUT  

        PUT     输出多行数据  

        NEW_LINE   起一个新行    

        PUT_LINE   输出一行数据  

        GET_LINE   得到一行信息   

        GET_LINES  得到多行信息            

     UTL_FILE  

        对操作系统文件进行操作;                 



                                   第 93 页,共 106 页 


…………………………………………………………Page 94……………………………………………………………

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



    DBMS_LOB  

       对 LOB 对象的读和写    

    UTL_HTTP       

       可以把指定的网页的内容摘取下来                            

                        

    静态的 SQL语句的执行过程:  

    分析     PARSE    

    绑定     BIND  

    执行     EXECUTE  

    取操作  FETCH  

  用户可以通过 DML 语句对 LONG 类型的数据可以直接访问;  



7、触发器  



    触发器:  

         不能直接调用,必须得事件触发,一般情况下是与对象、数据库和方案有关。  

       1。  数据库触发器  

       2。  应用触发器  

           当一个操作与另一个操作有密切关系的时候;  

           触发器不要太大,如果代码量大,要把触发器放到一个可执行的存储过程中;  

           不要在一个对象上建立太多的触发器;    

       3。  表触发器  

               BEFORE 做数据校验  

               AFTER  在操作以后对操作和数据进行记录  

       4。  视图触发器  

               INSTEAD OF 对视图的操作替换成对视图的基表的操作   

       5。  行级触发器  

               对多行的操作,每操作一行都会触发触发器。  

       6。  语句级触发器  

               当一条语句执行的时候触发,执行一次触发一次,与操作的行数无关。  

           WHEN CLAUSE 触发器执行条件   



1。语句级:              



    CREATE 'OR REPLACE' TRIGGER trigger_name   

       timing(before/after)  

         event1 'or event2 or event3' ON table_name  

    trigger_body  

  在同一个方案下不允许重名。                           

  CREATE OR REPLACE TRIGGER secure_emp  

  BEFORE INSERT OR UPDATE OR DELETE ON employees  

  BEGIN  

   IF (TO_CHAR (SYSDATE; 'HH24') NOT BETWEEN '08' AND '12') AND DELETING  

   THEN  

        RAISE_APPLICATION_ERROR (…20502;'You may delete from EMPLOYEES table  

                only during business hours。');  



                                 第 94 页,共 106 页 


…………………………………………………………Page 95……………………………………………………………

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



     ELSIF (TO_CHAR (SYSDATE; 'HH24') NOT BETWEEN '12' AND '18') AND INSERTING THEN  

    

       RAISE_APPLICATION_ERROR (…20500;'You may insert into   

         EMPLOYEES table only during business hours。');  

    

     ELSIF (TO_CHAR (SYSDATE; 'HH24') NOT BETWEEN '8' AND '18') AND UPDATING ('SALARY')  

  THEN  

    

       RAISE_APPLICATION_ERROR (…20503;'You may update   

           SALARY only during business hours。');  

     ELSE  

       RAISE_APPLICATION_ERROR (…20504;'You may update   

              EMPLOYEES table only during normal hours。');  

   END IF;  

  END;  



2。行级触发器:  



    CREATE 'OR REPLACE' TRIGGER trigger_name  

    timing   

            event1 'OR event2 OR event3'  

            ON table_name   

        'REFERENCING OLD AS old / NEW AS new'  

    FOR EACH ROW  

        'WHEN (condition)' //执行条件  

    trigger_body  

    

  :OLD。字段名/:NEW。字段名 引用格式。  

  例:  

  CREATE OR REPLACE TRIGGER restrict_salary  

    BEFORE  INSERT OR 'UPDATE OF' salary ON employees  

      FOR EACH ROW  

   WHEN (new。salary is not null)     //在出发器头里,new。salary 相当与本身的变量  

      BEGIN  

        IF  :NEW。salary》2*:old。salary    //在TRIGGER_BODY 里,:NEW。salary 相当与一个绑 

  定变量  

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