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内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)...
  • villare
  • villare
  • 2016年12月02日 19:10
  • 1275

ORACLE中record、varray、table和%type、%rowtype的使用详解

1     说明 1.1       RECORD   定义记录数据类型。它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的、分离的、基本数据类型的变量组成一...

PL/SQL %TYPE 属性

-- Start CREATE TABLE TEST ( TEST_COL CHAR(10) ); DECLARE TEST1 CHAR(10); -- 申明 TEST2 变量,类型和 T...

API实现自动处理物料搬运单

目的:模拟EBS Form界面的功能,自动处理物料搬运单。实现思路:1.  先创建一个客户化的表,这个表中用来保存物料搬运单的一些信息。2.  调用标准的API:inv_loc_wms_pub.cre...

OM模块功能&API详解

目录(?)[-] 一销售订单概述 11   与车间模块关系12   与库存模块关系13   与应收模块关系14   与采购模块关系15   与CRM模块关系15   与物料清单模块关系16...

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

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

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

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

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

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

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

特点 PL/SQL语言是SQL语言的扩展,具有为程序开发而设计的特性,如数据封装、异常处理、面向对象等特性。PL/SQL是嵌入到Oracle服务器和开发工具中的,所以具有很高的执行效率和同Oracl...

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

1.PL/SQL的介绍 pl/sql是什么 pl/sql是oracle在标准sql语言上的扩展。pl/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许使用条件语句和循环语句...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL常用自定义类型
举报原因:
原因补充:

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