zoukankan      html  css  js  c++  java
  • pl/sql(2)


    1.存储过程


    (1)存储过程的创建及改动

    语法:

    CREATE [OR REPLACE] PROCEDURE procedure_name
    [(parameter_name [IN | OUT | IN OUT] datatype [{(:= | DEFAULT ) defaultvalue}] [, ...])]
    {IS | AS}
    BEGIN
    procedure_body
    END procedure_name;


    语法解析:

    IN:输入參数。

    OUT:输出參数;

    IN OUT:就可以输入也可输出的參数;

    datatype:參数的数据类型。此处不能带精度。

    :=|DEFAULT:用于设置參数的默认值。

         

    (2)

         例1:

                    
          

                     

       过程的调用

                     

      例2:带两个參数

     
                      
           

              过程调用
                     
                     

          (3) 删除过程
    DROP PROCEDURE test_procedure;

       2.函数

    过程用来完毕一项任务,可能不返回值,也可能返回多个值,过程的调用是一条PL/SQL语句;函数包括RETURN子句,用来进行数据操作,并返回一个单独的函数值,函数的调用仅仅能在一个表达式中。

    语法:

    --函数是能够返回值的命名的 PL/SQL 子程序。 
    --创建函数的语法:
      CREATE [OR REPLACE] FUNCTION 
      <function name> [(param1,param2)]
    RETURN <datatype>  IS|AS 
      [local declarations]
    BEGIN
      Executable Statements;
      RETURN result;
    EXCEPTION
      Exception handlers;
    END;
    

    例:
                              


                              

    调用函数:

                              



        3.程序包中的游标
         
            游标的定义分为游标规范和游标主体两部分
             在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型
             RETURN子句指定的数据类型能够是:
                      用 %ROWTYPE 属性引用表定义的记录类型
                      程序猿定义的记录类型

    例1:
         

    调用



            
    例2:
         
    实现增删查改:




           4.触发器

    (1)触发器的分类

            触发器分为 DML 触发器、 INSTEAD OF 触发器、DDL 触发器和系统触发器三种类型
            DML 触发器包含行级触发器、语句级触发器
    (2)触发器的功能:
                       自己主动生成数据
                       自己定义复杂的安全权限
    例:

    针对周六日不能进行改动数据库:





    測试:


                       提供审计和日志记录
                       启用复杂的业务逻辑



    (3)行级触发器:

    用触发器实现自增的主键:


    1.


    2.效率高

     

    3.效率低




    (4)语法解析:

    INSTEAD OF:仅用于替代触发器,即event_target必须为视图,并且必须带FOR EACH ROW子句

    trigger_event:触发的事件。能够是DML事件(INSERT、UPDATE、DELETE、INSERT OR UPDATE、UPDATE OF column_name),系统事件(STARTUP、SHUTDOWN等)。

    event_target:即指trigger_event事件是发生在哪个对象上的。如DML事件,那么event_target应该是表名或视图名,假设是系统事件,那么event_target就应该是DATABASE或SCHEMA

    FOR EACH ROW:假设带此子句。即表示该触发器是行级触发器。假设省略,则是语句级触发器。

    WHEN condition :用于限制行级触发器,仅仅有满足condition条件,才会触发触发器。


    (5)改动触发器的状态

    触发器有ENABLED和DISABLED两种状态。

    改动某个触发器的状态能够运行以下的SQL:

    ALTER TRIGGER trigger_name ENABLE | DISABLE;

     

    使某个表上的全部触发器有效或无效:

    ALTER TABLE table_name {ENABLE | DISABLE} ALL TRIGGERS;

     

    (6)删除触发器

    DROP TRIGGER trigger_name;

      

  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6775872.html
Copyright © 2011-2022 走看看