- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全面探讨PL/SQL的复合数据类型
PL/SQL有两种复合数据结构:记录和集合。记录由不同的域组成,集合由不同的元素组成。在本文 中我们将讨论记录和集合的类型、怎样定义和使用记录和集合。
PL/SQL记录
记录是PL/SQL的一种复合数据结构,scalar数据类型和其他数据类型只是简单的在包一级进行 预定义,但复合数据类型在使用前必须被定义,记录Z所以被称为复合数据类型是因为他由域这种 由数据元索的逻辑组所组成。域可以是scalar数据类型或其他记录类型,它与c语言中的结构相似, 记录也可以看成表中的数据行,域则相当于表中的列,在表和虚拟表(视图或查询)中非常容易定 义和使用,行或记录中的每一列或域都可以被引用或单独赋值,也可以通过一个单独的语句引用记 录所有的域。在存储过程或函数中记录也可能有参数。
创建记录
在PL/SQL中有两种定义方式:显式定义和隐式定义。一旦记录被定义后,声明或创建定义类型 的记录变量,然后才是使用该变量。隐式声明是在慕于表的结构或查询上使用%TYPE属性,隐式声明 是一个更强有力的工具,这是因为这种数据变量是动态创建的。
显式定义记录
显式定义记录是在PL/SQL程序块中创建记录变量Z前在声明部分定义。使用typo命令定义记录, 然后在创建该记录的变量。语法如卜 1
TYPE record_type TS RECORD (ficlddcfinition_list):
f ield_definition_list是由逗号分隔的列表。
域定文的语法如下:
field name data type and size [NOT NULL][{:=|DEFAULT} default value]
域名必须服从与表或列的命名规则相同的命名规则。下面我们看一个例子:
DELCARE
TYPE stock_quoto_roc TS 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属性用于引用数据库中的表或视图的数据类型和人小,而在此Z前程序不知道 类型和大小。在上面的例子中记录域在编译时将被定义为与列SYMBOL相同的数据类型和大小,当代码 中要使用来自数据库中的数据时,在变量或域定义中最好使用%TYPE来定义。
隐式定义记录
庖式定义记录屮,我们不用描述记录的每一个域。这是因为我们不需要定义记录的结构,不需 要使用TYPE语句,相反在声明记录变量时使用%ROWTYPE命令定义与数据库表,视图,游标有相同结 构的记录,与TYPE命令相同的是它是一种定义获得数据库数据记录的好方法。
DECLARE
accounter_info accounts%ROWTYPR:
CURSOR xactions_cur (acct_no IN VARCHAR2) IS
SELECT action,timestamp, hoi ding
FROM portfolios
WHERE account nbr=,acct no
t
xaction info xactions cur%ROWTYPE;
variable
有一些PL/SQL指令在使用隐式定义记录时没有使用%ROWTYPE属性,比如游标FOR循环或触发器中 的:old和:new记录。
DELCARE
CURSOR xaction cur IS
SELECT action,timeamp, holding
FROM portfolios
WHERE account_nbr=,37
t
BEGIN
FOR xaction_rec in xactions_cur
LOOP
IF xactions_rec. holding二ORCL
THEN
notify_shareholder;
END IF;
END LOOP;
使用记录
用户可以给记录赋值、将值传递给其他程序。记录作为一种复合数据结构意味作他有两个层次 可用。用户可以引用整个记录,使用select into或fetch转移所有域,也可以将整个记录传递给一 个程序或将所有域的值赋给另一个记录。在史低的层次,用户可以处理记录内单独的域,用户可以 给单独的域赋值或者在单独的域上运行布尔表达式,也可以将一个或更多的域传递给另一个程序。
引用记录
记录由域组成,访问记录中的域使用点(.)符号。我们使用上面的例子看看
DELCARE
TYPE stock_quoto_roc TS RECORD
(symbo
文档评论(0)