• 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;

      

  • 相关阅读:
    docker学习1--dockerfile
    关于java php go 中AES加解密秘钥长度问题
    API设计中响应数据格式用json的优点
    mac air中编译安装swoole
    跟踪填写表单重复信息
    JS简单实现点赞操作
    JS验证码生成(入门级别)
    注册页面(入门)
    登录表单(入门简单)
    简单的UDP编程1
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6775872.html
Copyright © 2020-2023  润新知