oracle 基础学习03 ---- 函数 触发器 存储过程

来源:互联网 发布:淘宝上买狗狗可靠吗 编辑:程序博客网 时间:2024/06/05 04:20

                                             本人是新手,内容属抄袭,请各位大神见谅!!!

14.函数和存储过程

存储过程与函数是以数据库对象的方式存储在数据库之中的,用户可以在任何客户机上登录到数据库,并调用或者修改代码。存储过程和函数可由数据库提供安全保护机制,要想使用存储过程与函数,需要有存储过程和函数使用者的授权,只有授权用户和操作者本身才能执行存储过程或者调用函数。存储过程和函数的信息是写入到数字字典之中的,所以存储过程可以看作是一个公共的模块,用户编写的pl/sql程序或者其他的存储过程都可以调用它,一个重复的功能,可以使用存储过程或者函数来实现,存储过程和函数是需要先进行编译,以排除语法错误,只有编译通过才能调用。

 创建存储过程和函数需要有create procedure 或者create any procedure 的系统权限,该权限可以由系统管理员授予。

创建存储过程的基本语法如下:

  ----存储过程的创建

create orreplaceprocedure procedure_name(var|in|out)

is|as

{说明部分}

begin

    statements;

    exception

     statements;

end;

 

/*说明:or replace表示的是如果存储过程存在,则用新的存储过程来覆盖它

通常用于存储过程的重建操作,参数的类型有三种形式:inoutin out,没有指明时,默认为in类型。

as或者is后面跟的是过程的说明部分,可以定义局部变量。*/

 

dropprocedure procedure_name;

----删除存储过程,需要有drop any procedure权限

 

alterprocedure procedure_namecompile;

----重新编译一个存储过程,需要alter any procedure权限

 

executeprocedure_name;

----需要execute any procedure权限

begin

   procedure_name;

end;

 

----函数的创建

create orreplacefunction function_name(var|in|out)

return数据类型

is|as

{说明部分}

begin

    statements;

    return (表达式);

    exception

     statements;

end;

----函数的操作与存储过程相同,唯一不同的是函数具有返回值,存储过程不具有返回值

 

Describe user_source;//查看资源

15.触发器

   触发器在数据库之中是以独立的对象存储的,触发器不需要用户显示调用来执行,触发器是由一个事件来启动运行的,即触发器是当某个事件发生时自动隐式运行,触发器不能接收任何的参数,触发器常常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或者用来监视对数据库的各种操作,实现审计的功能。触发器主要分为两类:在表级别上的触发器和在数据行上的触发器,也有前触发器后触发器的说法。

  

----触发器操作

CREATE [ORREPLACE]TRIGGER trigger_name

{BEFORE |AFTER }  ----前触发器或者后触发器

{INSERT |DELETE |UPDATE [OFcolumn [,column …]]} ------触发事件

[OR {INSERT |DELETE | UPDATE [OFcolumn [,column …]]}...]

ON[schema.]table_name | [schema.]view_name    -------在那个上面

[REFERENCING {OLD [AS]old | NEW [AS]new|PARENTasparent}]

[FOREACHROW ]  -----是否发生在行上或者是整个表上

[WHEN condition]  ----约束条件,去掉之后就是对所有行进行触发操作

case

   when-----;处理对应的事物  deleting updating inserting

     else; ----

endcase;

 

BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发方式,前触发是在执行触发事件之前触发当前所创建的触发器,后触发是在执行触发事件之后触发当前所创建的触发器。FOR EACH ROW选项说明触发器为行触发器。行触发器和语句触发器的区别表现在:行触发器要求当一个DML语句操走影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事件,当它符合约束条件时,激活一次触发器。当省略FOR EACH ROW 选项时,BEFORE 和AFTER触发器为语句触发器,而INSTEADOF 触发器则只能为行触发器。REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN  子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。WHEN 子句说明触

 发约束条件。Condition 为一个逻辑表达时,其中必须包含相关名称,而不能包含查询语句,也不能调用PL/SQL 函数。WHEN 子句指定的 触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD  OF 行触发器和其它类型的触发器中。当一个基表被修改( INSERT,  UPDATE, DELETE)时要执行的存储过程,执行时根据其所依附的基

 表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。


原创粉丝点击