PL/SQL常用自定义类型

原创 2013年12月04日 17:18:30

概述:PL/SQL中常用的自定义类型就两种:记录类型、PL/SQL内存表类型

(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)


1、记录类型的定义语句:

TYPE type_name IS RECORD
(field_declaration[, field_declaration]…);
identifier type_name;

这里的field_declaration 的具体格式可以是:

field_name {field_type | variable%TYPE
| table.column%TYPE | table%ROWTYPE}
[[NOT NULL] {:= | DEFAULT} expr]


举例:

TYPE type_group_rec IS RECORD(
    interface_run_id NUMBER ,
    set_of_books_id  NUMBER ); --RECORD


2、%ROWTYPE属性:在PLSQL中%ROWTYPE 表示某张表的记录类型或者是用户指定以的记录类型,使用此
属性可以很方便的定义一个变量,其类型与某张表的记录或者自定义的记录类型保持一致。极大的方便了
Select * into ….的语句使用。

定义:emp_rec employees%ROWTYPE;


3、PLSQL内存表即Index By Table , 这种结构类似于数组,使用主键提供类似于数组那样的元
素访问。这种类型必须包括两部分:1、使用BINARY_INTEGER 类型构成的索引主键; 2、另外一个简单类型
或者用户自定义类型的字段作为具体的数组元素。这种类型可以自动增长,所以也类似于可变长数组。

语法:

TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
| table.%ROWTYPE
[INDEX BY BINARY_INTEGER];
identifier type_name;

举例:这是一个简单数组

TYPE ename_table_type IS TABLE OF
employees.last_name%TYPE
INDEX BY BINARY_INTEGER;
ename_table ename_table_type;


4、实例:


定义数组

TYPE type_group_info IS TABLE OF NUMBER INDEX BY PLS_INTEGER ; --定义一维数组
  rec_group_info type_group_info;

TYPE type_batch_info IS TABLE OF type_group_info INDEX BY PLS_INTEGER; --定义二维数组
  rec_batch_info type_batch_info;

--一维数组赋值
rec_group_info(1) := 1;

--二维数组赋值
rec_batch_info(1)(1) := 1;

记录型变量定义
TYPE type_group_rec IS RECORD(
    interface_run_id NUMBER ,
    set_of_books_id  NUMBER ); --RECORD
TYPE type_group_tbl IS TABLE OF type_group_rec INDEX BY PLS_INTEGER ; --定义二维数组
l_type_group_tbl type_group_tbl ;

初始化:(初始化并不是必须的,视情况而定,最好是在程序的入口对数组进行初始化)
l_type_group_tbl.delete;

赋值:
l_type_batch_tbl(l_type_batch_tbl.count + 1 ).interface_run_id := l_type_group_tbl(l_type_group_tbl.count)
                                                                             .interface_run_id;
l_type_batch_tbl(l_type_batch_tbl.count).batch_id := l_batch_id;
同时赋值时注意第二个变量的数量,不能够是count + 1,如果是count + 1在最后count时记录型变量的数量会翻倍。


实例:
DECLARE
  TYPE type_group_rec IS RECORD (
    interface_run_id NUMBER ,
    set_of_books_id  NUMBER ); --RECORD
  TYPE type_batch_rec IS RECORD (
    interface_run_id NUMBER ,
    batch_id         NUMBER ); --RECORD
  TYPE type_group_tbl IS TABLE OF type_group_rec INDEX BY PLS_INTEGER; --定义二维数组
  TYPE type_batch_tbl IS TABLE OF type_batch_rec INDEX BY PLS_INTEGER; --定义二维数组
  l_type_group_tbl type_group_tbl;
  l_type_batch_tbl type_batch_tbl;
  l_index          NUMBER := 0 ;
  l_org_index      NUMBER := 0 ;
BEGIN

  FOR i IN 1 .. 3 LOOP
    l_index := l_index + 1 ;
    l_org_index := l_org_index + l_index;
    l_type_group_tbl(l_type_group_tbl.count + 1 ).interface_run_id := l_index;
    l_type_group_tbl(l_type_group_tbl.count).set_of_books_id := l_org_index;
    l_type_batch_tbl(l_type_batch_tbl.count + 1 ).interface_run_id := l_index;
    l_type_batch_tbl(l_type_batch_tbl.count).batch_id := l_org_index;
  END LOOP ;

  FOR a IN 1 .. l_type_group_tbl.count LOOP
    dbms_output.put_line( 'l_type_group_tbl(a = ' || a ||
                         ').interface_run_id = ' || l_type_group_tbl(a)
                         .interface_run_id);
    dbms_output.put_line( 'l_type_group_tbl(a = ' || a ||
                         ').set_of_books_id = ' || l_type_group_tbl(a)
                         .set_of_books_id);
    FOR b IN 1 .. l_type_batch_tbl.count LOOP
      IF l_type_group_tbl(a)
       .interface_run_id = l_type_batch_tbl(b).interface_run_id THEN
        dbms_output.put_line( 'l_type_batch_tbl(b = ' || b ||
                             ').interface_run_id = ' || l_type_batch_tbl(b)
                             .interface_run_id);
        dbms_output.put_line( 'l_type_batch_tbl(b = ' || b ||
                             ').batch_id = ' || l_type_batch_tbl(b)
                             .batch_id);
      END IF ;
    END LOOP ;
  END LOOP ;
END ;


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

PL/SQL 基础---复杂数据类型和自定义类型

PL/SQL 基础—复杂数据类型和自定义类型 PLSQL中常用的自定义类型就两种: 记录类型、 PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)...

Oracle自定义类型 Record + PL/SQL表

一,什么是记录Record和PL/SQL表?    记录Record:由单行多列的标量类型构成的临时记录对象类型。类似于多维数组。  PL/SQL表:由多行单列的索引列和可用列构成的临时索引表对...

PL/SQL表(oracle内存表)---table()函数用法

PL/SQL表(oracle内存表)---table()函数用法 http://blog.csdn.net/jojo52013145/article/details/6758279   Orac...

PLSQL内存表

在项目的PLSQL部分中,第一次接触了内存表的概念,类似于C编程语言的数组,以前一直在找PLSQL中COLLECITION的概念。1.      内存表概念:PL/SQL表类似于C语言中的数组。如果要...

pl/sql之定义并使用变量,复合类型

定义并使用变量  介绍 在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有: 1.标量类型(scalar) 2.复合类型(composite) 3.参照类型(reference...
  • yjsuge
  • yjsuge
  • 2011-06-18 15:02
  • 2203

oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数

键字: oracle pl/sql 基本构成 块结构 基本 语法 要求 数据 类型 变量 定义 运算符 函数 特点 PL/SQL语言是SQL语言的扩展,具有为程序开...
  • lxxlql
  • lxxlql
  • 2011-03-17 17:58
  • 1490

oracle的学习六:pl/sql基础(数据类型、定义变量)、游标、过程、函数、包、触发器(系统触发器)

1.PL/SQL的介绍 pl/sql是什么 pl/sql是oracle在标准sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句...

PL/SQL定义部分之二复合数据类型

本文详细介绍PL/SQL定义部分之二复合数据类型   复合类型  复合类型可以存储多个值,包括记录和集合。集合是一维的,但是可以在集合中放入其它集合,变成多维集合。集合又分为索引...

PL/SQL基础编程之(五)[自定义复合变量][%TYPE和%ROWTYPE的应用]

1、自定义复合变量查询以及输出案例: declare TYPE myrecord IS RECORD( aa varchar2(10), bb varchar2(10)); -...

Oracle PL/SQL开发基础(第三十一弹:自定义异常)

声明异常如:DECLARE e_nodeptno EXCEPTION; BEGIN NULL; END;异常的声明跟变量的声明非常相似,其类型为EXCEPTION。不过异常是一种错误...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)