全面探讨PLSQL的复合数据类型.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档