全面探讨PL/SQL的复合数据类型

PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。在本文中我们将讨论记录和集合的类型、怎样定义和使用记录和集合。

PL/SQL记录

记录是PL/SQL的一种复合数据结构,scalar数据类型和其他数据类型只是简单的在包一级进行预定义,但复合数据类型在使用前必须被定义,记录之所以被称为复合数据类型是因为他由域这种由数据元素的逻辑组所组成。域可以是scalar数据类型或其他记录类型,它与c语言中的结构相似,记录也可以看成表中的数据行,域则相当于表中的列,在表和虚拟表(视图或查询)中非常容易定义和使用,行或记录中的每一列或域都可以被引用或单独赋值,也可以通过一个单独的语句引用记录所有的域。在存储过程或函数中记录也可能有参数。

创建记录

在PL/SQL中有两种定义方式:显式定义和隐式定义。一旦记录被定义后,声明或创建定义类型的记录变量,然后才是使用该变量。隐式声明是在基于表的结构或查询上使用%TYPE属性,隐式声明是一个更强有力的工具,这是因为这种数据变量是动态创建的。

显式定义记录

显式定义记录是在PL/SQL程序块中创建记录变量之前在声明部分定义。使用type命令定义记录,然后在创建该记录的变量。语法如下:

TYPE record_type IS RECORD (field_definition_list);

field_definition_list是由逗号分隔的列表。

域定义的语法如下:

field_name data_type_and_size [NOT NULL][{:=|DEFAULT} default_value]

域名必须服从与表或列的命名规则相同的命名规则。下面我们看一个例子:

DELCARE
TYPE stock_quote_rec IS RECORD
(symbol stock.symbol%TYPE
,bid NUMBER(10,4)
,ask NUMBER(10,4)
,volume NUMBER NOT NULL:=0
,exchange VARCHAR2(6) DEFAULT 'NASDAQ'
);
real_time_quote stock_quote_rec;
variable

域定义时的%TYPE属性用于引用数据库中的表或视图的数据类型和大小,而在此之前程序不知道类型和大小。在上面的例子中记录域在编译时将被定义为与列SYMBOL相同的数据类型和大小,当代码中要使用来自数据库中的数据时,在变量或域定义中最好使用%TYPE来定义。

时间: 2024-11-08 21:56:41

全面探讨PL/SQL的复合数据类型的相关文章

SQL, PL/SQL 之NUMBER数据类型

    NUMBER数据类型在Oracle中使用的较为广泛,可以存储零值,正负数,以及定长数,对于这个数据类型有个几个概念要搞清,否则容易搞混,下面给出具体描述.   1.可表示范围及存储空间    从1.0 x 10-130 到 1.0 x 10126(不包括),如果表达式或值大于1.0 x 10126,Oracle会返回错误信息    所需的存储空间为1到22个字节 2.Number类型表示法    NUMBER(p,s)   P 和S 可选     其中precision表示数字的总长度,

PL/SQL语言基础(原创)

PL/SQL概述 PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点.使得该语言不仅具有过程编程语言的特征,如循环.条件分支等.同时也具有对象编程语言的特征,如重载.继承等.PL/SQL程序语言的组成主要由块组成一个块由三个基本部分组成:声明.执行体.异常处理PL/SQL块有匿名块和命名块命名块会将代码保存到服务器    典型的块结构如下        [ DECLARE                    --声明部分      

Oracle数据库之PL/SQL程序基础设计

一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执行部分--PL/SQL语句和SQL语句 */ EXCEPTION /* * 异常处理部分--处理运行异常 */ END; /*块结束标记 */ 要实现PL/SQL程序设计,先介绍如下的基本内容: 二.标识符 PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同: 标识符名第一个字符必须为

PL/SQL学习笔记(一)

笔记 一.PL/SQL中的数据类型,简列如下: Number[(m,n)]  唯一的数值类型.m-精度,n-小数位数.INTEGER.REAL是NUMBER的同义词定义的. VARCHAR2(maxsize[CHAR|BYTE])唯一的字符串类型.CHAR.VACHAR是VARCHAR2的同义词定义的.NVARCHAR2与VARCHAR2的表现形势一样,只是用于国际字符集数据类型. DATE 日期/时间类型. BOOLEAN布尔型.只有TRUE.FALSE两个值. 二.PL/SQL的执行体 DE

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

复合类型 复合类型可以存储多个值,包括记录和集合.集合是一维的,但是可以在集合中放入其它集合,变成多维集合.集合又分为索引表.嵌套表和变长数组三种.要使用集合,我们首先要创建集合类型,然后声明该类型的变量.我们可以在任何PL/SQL块.子程序或包的声明部分使用TABLE和VARRAY关键字来声明集合类型.集合的作用域和同其他类型变量一样,在一个块或子程序中,当程序进入块或子程序时有效,退出时失效.在包中,集合在我们第一次引用包的时候有效,直至会话终止时才失效. 一.记录 记录可以包括多个成员,从

PL/SQL数据类型及操作符_oracle

标量(scalar)数据类型 标量(scalar)数据类型没有内部组件,他们大致可分为以下四类: . number . character . date/time . boolean 表1显示了数字数据类型:表2显示了字符数据类型:表3显示了日期和布尔数据类型. 表1 Scalar Types:Numeric Datatype Range Subtypes description BINARY_INTEGER -214748-2147483647 NATURALNATURALNPOSITIVEP

PL/SQL学习笔记-常量变量及数据类型初步

一:常量和变量 开始之前,还是照例做个经典的例子,如下: declare mydate varchar2(16) := 'hellow world'; begin dbms_output.put_line(mydate); end; declare是声明部分我在这个部分声明了varchar2类型的变量,名字叫mydata,内容是hellow world,长度是16个长度.begin-.end 部分是执行部分我在这里调用了oracle已有的过程dbms_output.put_line,这个过程起到

PL/SQL的异常处理机制的初步探讨

PL/SQL中如何在抛出异常后继续 这个问题曾一度让我郁闷,很有用的技巧! SQL> declare 2 type testitb is table of number index by binary_integer; a testitb; b number; 3 4 5 begin a(10):=11; 6 7 a(1):=12; a(4):=4; 8 9 for i in a.first .. a.last loop 10 11 b:=i; 12 dbms_output.put_line('

SQL,PL/SQL 数据类型一览表

The following is a list of datatypes available in Oracle. Character Datatypes The following are the Character Datatypes in Oracle: Data Type Syntax Oracle 9i Oracle 10g Oracle 11g Explanation(if applicable) char(size) Maximum size of 2000 bytes. Maxi