天天看点

pl/sql(2)

1.存储过程

语法:

语法解析:

IN:输入參数。

OUT:输出參数;

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

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

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

     例1:

pl/sql(2)
pl/sql(2)
pl/sql(2)
pl/sql(2)

          过程调用

pl/sql(2)

      (3) 删除过程

   2.函数

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

例:

pl/sql(2)

调用函数:

pl/sql(2)

    3.程序包中的游标

        游标的定义分为游标规范和游标主体两部分

         在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型

         RETURN子句指定的数据类型能够是:

                  用 %ROWTYPE 属性引用表定义的记录类型

                  程序猿定义的记录类型

例1:

pl/sql(2)

调用

pl/sql(2)

例2:

实现增删查改:

pl/sql(2)

       4.触发器

        触发器分为 DML 触发器、 INSTEAD OF 触发器、DDL 触发器和系统触发器三种类型

        DML 触发器包含行级触发器、语句级触发器

(2)触发器的功能:

                   自己主动生成数据

                   自己定义复杂的安全权限

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

pl/sql(2)
pl/sql(2)

測试:

pl/sql(2)

                   提供审计和日志记录

                   启用复杂的业务逻辑

(3)行级触发器:

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

pl/sql(2)

1.

pl/sql(2)

2.效率高

pl/sql(2)

3.效率低

pl/sql(2)

(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条件,才会触发触发器。

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

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

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