首页  登陆  注册  博客集  下载频道  网络硬盘  学院论坛  家园
IT学院 网站地图 网站地图
收藏本站 收藏本站
高级搜索 高级搜索
 新闻IT新闻 互联网 微软 黑客新闻 网络网络协议 故障 网络管理 TCP/IP 无线技术 解决方案 黑客技术 漏洞 软件评测 安全资讯
 数据MSsql Oracle Mysql PL/SQL 备份 系统:Linux vista Windows FTP 防火墙 注册表 服务器行情 服务器应用 解决方案 WEB服务器
 墙纸风景壁纸 游戏壁纸 体育壁纸 汽车壁纸 人文壁纸 影视壁纸 广告壁纸 花卉壁纸 节日壁纸 动漫壁纸 明星壁纸 绘画壁纸 月历壁纸
当前位置: > 主页>数据库技术>Oracle>PL/SQL>全面探讨PL/SQL的复合数据类型
热门文章排行
 
热门文章排行 SQL 语法参考手册
SQL*NET 的加密问题
两个sql程序
用Oracle SQL实现文件访
用PL/SQL产生随机数
加速SQL查询的特征函数
Oracle PL/SQL语言基础
全面探讨PL/SQL的复合数
Oracle9i的简化SQL语法
PL/SQL中调用Java源对象
精采文章推荐
 
精采文章推荐 用T-SQL强制所有用户退
最新更新文章
 
最新更新文章 用T-SQL强制所有用户退
PL/SQL中调用Java源对象
Oracle9i的简化SQL语法
全面探讨PL/SQL的复合数
Oracle PL/SQL语言基础
加速SQL查询的特征函数
用PL/SQL产生随机数
用Oracle SQL实现文件访
两个sql程序
SQL*NET 的加密问题

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

编辑:   来源:  日期:2008-02-06   我要投稿      家园


  stock_info stock_cur%ROWTYPE
  BEGIN
  OPEN stock_cur('ORCL');
  FETCH stock_cur INTO stock_info;
  使用赋值语句将整个记录复制给另一个记录是一项非常有用的技术,不过记录必须精确地被声明为相同的类型,不能是基于两个不同的TYPE语句来获得相同的结构。
  例:
  DECLARE
  TYPE stock_quote_rec IS RECORD
  (symbol stocks.symbol%TYPE
  ,bid NUMBER(10,4)
  ,ask number(10,4)
  ,volume NUMBER
  );
  TYPE stock_quote_too IS RECORD
  (symbol stocks.symbol%TYPE
  ,bid NUMBER(10,4)
  ,ask number(10,4)
  ,volume NUMBER
  );
  --这两个记录看上去是一样的,但实际上是不一样的
  stock_one stocks_quote_rec;
  stock_two stocks_quote_rec;
  --这两个域有相同的数据类型和大小
  stock_also stock_rec_too;--与stock_quote_rec是不同的数据类型
  BEGIN
  stock_one.symbol:='orcl';
  stock_one.volume:=1234500;
  stock_two:=stock_one;--正确
  syock_also:=stock_one;--错误,数据类型错误
  stock_also.symbol:=stock_one.symbol;
  stock_also.volume:=stock_one.volume; 
  记录不能用于INSERT语句和将记录直接用于比较,下面两种情况是错误的:
  INSERT INTO stocks VALUES (stock_record);
  和
  IF stock_rec1>stock_rec2 THEN
  要特别注意考试中试题中有可能用%ROWTYPE来欺骗你,但这是错误的,记住这一点。还有可能会出现用记录排序的情况,ORACLE不支持记录之间的直接比较。对于记录比较,可以采用下面的两个选择:
  . 设计一个函数,该函数返回scalar数据类型,使用这个函数比较记录,如
  IF sort_rec(stock_one)>sort_rec(stock_two) THEN
  . 可以使用数据库对象,数据库对象可以使用order或map方法定义,允许oracle对复合数据类型进行比较。关于数据库对象的讨论已经超越了本文的范围,要详细了解数据库对象,可以查阅oracle手册。
  PL/SQL集合
  集合与其他语言中的数组相似,在ORACLE7.3及以前的版本中只有一种集合称为PL/SQL表,这种类型的集合依然保留,就是索引(INDEX_BY)表,与记录相似,集合在定义的时候必须使用TYPE语句,然后才是创建和使用这种类型的变量。
  集合的类型
  PL/SQL有三种类型的集合
  . Index_by表
  . 嵌套表
  . VARRAY
  这三种类型的集合之间由许多差异,包括数据绑定、稀疏性(sparsity)、数据库中的存储能力都不相同。绑定涉及到集合中元素数量的限制,VARRAY集合中的元素的数量是有限,Index_by和嵌套表则是没有限制的。稀疏性描述了集合的下标是否有间隔,Index_by表总是稀疏的,如果元素被删除了嵌套表可以是稀疏的,但VARRAY类型的集合则是紧密的,它的下标之间没有间隔。
  Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。
  虽然这三种类型的集合有很多不同之处,但他们也由很多相似的地方:
  . 都是一维的类似数组的结构
  . 都有内建的方法
  . 访问由点分隔
  Index_by表
  Index_by表集合的定义语法如下:
  TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX
  BY BINARY_INTERGET;
  这里面重要的关键字是INDEX BY BINARY_INTERGET,没有这个关键字,那么集合将是一个嵌套表,element_type可以是任何合法的PL/SQL数据类型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。
上一页 1 2下一页


上一篇:Oracle PL/SQL语言基础  
下一篇:Oracle9i的简化SQL语法
 关键字:  
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论
 

  责任编辑:IT学院  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。