PL/SQL学习笔记(3)

        气死我了,昨天写了1个多小时的PL/SQL学习笔记(2)居然没有发布上,真过分,哎也没有心情再去重新写了,直接上第三篇。

                                                   异常处理概念

       在PL/SQL中,主要有三种异常处理方式,1、预定义(predefined)异常;2、非预定义异常;3、用户定义异常。下面我们分别一一介绍各个异常的处理方式

1、预定义异常

结构为:

              exception 

                      when    exp1    then .................;

                      when    exp2     then................;

                                    .......

                      when     others    then.....................;

 

2、非预定义异常

结构为3部分(1)、声明 : 异常名   exception;(2)、初始化:  pragma    exception_init(异常名 ,编号);(3)、异常处理:在exception的when语句中对这个exception进行处理。

3、用户定义异常

结构同样分为3部分(1)、声明异常:exception;(2)、抛出异常: raise  异常名;(3)、异常处理:在exception的when语句中对这个exception进行处理。

 

                                                    函数和过程

函数和过程是存储在数据库中的可以被其他函数或过程调用。两者的区别在于函数有返回值,过程没有返回值。

1、函数的创建格式为:

      create or replace function   函数名(arg1  in|out|in out  type,......)  return  type is  .....

         begin

............................

           return    (result);

              exception

 .............................

        end  函数名;

                 

2、函数的调用方法

      有三种调用方法,(1)、序列表示法,函数名(arg1,...argn),这儿的参数序列必须与函数定义时一样。(2)、名称表示法,函数名(arg1=>par1,....argn=>parn),这儿的参数可以自由排列;(3)、混合以上两种,但是只要一旦使用名称表示法,后面的参数都必须使用名称表示法。

3、参数的默认值

       只需要在参数的后面加default  value,就行了。

 

4、过程的定义调用和函数都差不多,我就不再赘述了。

5、删除函数或过程,drop  function/procedure   名字;

 

                                                      包的创建和应用

        在PL/SQL中的一个包相当于java中的一个类,把变量、常量、函数、过程这些PL/SQL的程序设计元素组合起来。一个包包含两个部分,包定义和包主体。

包定义:定义程序设计元素,这些元素全是共有元素,可以被其他程序调用。

包主体:在这里面还可以定义元素,可以是私有的。在这个部分我们必须实现所有的包定义元素。

这两个部分分开编译,分开存储在数据库字典中。

 

包定义的语法

create or replace package 名字  [is|as]

     元素定义

end   名字;

 

包体定义的语法

create or replace package  body 名字  [is|as]

     元素定义

end   名字;

 

包的开发步骤

1、把各个存储函数和过程调试通过;

2、把各个函数和过程聚在一起;

3、根据各个函数和过程加上包定义;

4、加上包主体;

5、调试通过。

 

删除包,也是使用drop 语句。

 

子程序的重载

        这个重载和java一样,但是这儿有一个类型系列必须不同的规定,像char和varchat是一个系列,他们就不能重载。

 

                                            触发器

   以独立的对象存储在数据库中,由事件触发,不能接受参数。

    触发器的组成(1)、触发事件(DML/系统事件);(2)、触发时间(before|after);(3)、触发频率(语句级|行级);(4)、触发器本身(触发事件之后需要干的事)。

    有三类触发器

      (1)、DML触发器

      (2)、替代触发器

      (3)、系统触发器

 

DML触发器

语法:

      create or replace trigger  名字 

               [before|after] 

                update|delete|insert  [of column [of column.....]]   on  表名

               [for each row]

              [when  condition]

               。。。。。。。。。

              end  名字;

 

触发器的执行顺序

     before 语句级 trigger

         对于每一行

             before  行级  trigger

                   触发器本身

              after  行级   trigger

       after  语句级   trigger

 

 

触发器的限制

        (1)、trigger的大小不能超过32kb;

        (2)、trigger体内的select语句必须有into语句或者与Cursor关联

         (3)、trigger体内不能有事务控制语句

        (4)、trigger体内调用了函数或过程,则函数和过程中必须满足(3);

         (5)、不能用long,long raw类型

 

DML触发器的谓词

       interting,updating,deletiing都是bool型的,我们可以用来判断是哪一种的DML触发器。我们在定义的时候可以用or连接多个DML语句,然后用when 语句判断处理。具体谁进谁我们可以从字面上看出来。

 

替代触发器

create or replace trigger 名字 instead of  DML语句  on view  [for each view]

    trigger  body

end  名字;

替代触发器主要是针对视图操作的,因为我们有时不能直接对视图进行操作,我们可以在trigger体中完成对视图的操作。

 

系统触发器

 这儿我不想再赘述了。

 

删除触发器

可以直接用drop语句,另外当表或者视图被删除时,其上的所有trigger都自动删除。

 

触发器的状态

disable,enable。我们可以使用Alter  语句改变trigger的状态。

eg:

alter  trigger  名字   enable|disable;

alter   table|view   enable|disable   all  triggers。

 

《完结》

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值