oracle PL\SQL块和复合类型

2018-12-04

PL\SQL程序块由三个部分组成:声明部分、执行部分、异常处理部分

其结构如下:

  declare

    /*声明部分:说明要用到得变量,类型及游标,以及局部存储过程和函数*/

      /*变量的定义和系统保留字要区分开(sql server 中可用@  PL\SQL不能用@)*/

  begin

    /*执行部分:过程及SQL语句*/

      /*必须有*/

  exception

    /*异常处理部分:错误处理*/

  end;

PL/SQL中除了一些常见的变量类型外,还有复合类型

  复合类型分为记录和表

  记录:由单行多列的标量构成的复合结构。可以看做是一种用户自定义数据类型。将一个或多个标量封装成一个对象进行操作。是一种临时复合对象类型。

    语法:

       type record_type is record(

        Field1 type1 [not null] [:= exp1],

        Field1 type1 [not null] [:= exp2],

        ...

        Fieldn typen [not null] [:= expn]);

      其中可以用%type和%rowtype 来为声明的变量快速指明类型。

        %type——使其对应的变量类型与已经定义好的某个数据变量的类型相同

        %rowtype——返回一个记录类型,其数据类型和数据库表的数据结构相同

   :使用记录类型变量只能保存一行数据,这限制了select返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是                  表类型,它是对记录类型的扩展,允许处理多行数据,类似于表

    语法:

      type type_name is table of table%rowtype  [index by binary_integer];

例子1:

  

  结果:

    

  在这个例子中注意:声明部分类似JAVA中的类——先定义一个类,然后定义一个它的对象

           执行部分:select —into—from—where  从表中选择一个合适的记录,然后赋值给into后的记录类型变量

例子2:

  

  结果:

   

  在例子2中,C_course%rowtype——说明表类型变量course_table_type的数据类型和C_course表的数据结构相同

         index by binary_integer——指定系统创建一个主键索引,用于引用表类型变量中的特定行

                    /*有这个后面的my_table(1)和my_table(2)才有意义*/

       创建表类型变量的意义就如上面提到的一样,在于处理多行数据。

  

猜你喜欢

转载自www.cnblogs.com/109-379-4468/p/10068229.html