使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。

创建表类型的语法如下:

TYPE table_name IS TABLE OF data_type [ NOT NULL ]

INDEX BY BINARY_INTEGER ;

语法说明如下:

--table_name  创建的表类型名称。

--IS TABLE  表示创建的是表类型。

--data_type  可以是任何合法的PL/SQL数据类型,例如varchar2。

--INDEX BY BINARY_INTEGER  指定系统创建一个主键索引,用于引用表类型变量中的特定行。

使用表类型的例子:

例一:直接对表类型变量赋值

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

begin

new_emp(1).empno:=6800;

new_emp(1).ename:='tracy';

new_emp(1).job:='clerk';

new_emp(1).sal:=2500;

new_emp(2).empno:=6900;

new_emp(2).ename:='luck';

new_emp(2).job:='manager';

new_emp(2).sal:=4000;

dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||

','||new_emp(1).sal);

dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||

','||new_emp(2).sal);

end;

/

例二:使用表类型变量的方法:变量名.方法名[索引号]

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

begin

new_emp(1).empno:=6800;

new_emp(1).ename:='tracy';

new_emp(1).job:='clerk';

new_emp(1).sal:=2500;

new_emp(2).empno:=6900;

new_emp(2).ename:='luck';

new_emp(2).job:='manager';

new_emp(2).sal:=4000;

dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);

dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||

','||new_emp(1).sal);

dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||

','||new_emp(2).sal);

--new_emp.delete(1);

dbms_output.put_line(new_emp.next(1));

end;

//

例三:与游标结合使用#p#分页标题#e#

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

v_num number:=0;

cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin

for v_emp in cur_emp loop

v_num:=v_num+1;

select * into new_emp(v_num) from scott.emp

where ename=v_emp.ename;

end loop;

for i in 1..new_emp.count loop

dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||

','||new_emp(i).sal);

end loop;

end;

/

注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。

oracle 中表变量的用法,oracle 表类型变量的使用相关推荐

  1. oracle中的and用法,Oracle bitand( )函数简介

    Oracle bitand( )函数在Oracle数据库中是很常见的,下面就为您详细介绍Oracle bitand( )函数的用法,如果您感兴趣的话,不妨一看. Oracle bitand( )函数: ...

  2. oracle的rownum的用法,Oracle Rownum用法

    Oracle Rownum用法 Oracle提供了rownum,rownum是一个隐含的(查询结果集)字段,rownum是一个行号,从1开始. rownum隐含字段 select rownum, a. ...

  3. oracle绑定变量写法,关于Oracle绑定变量的个人理解及使用场景

    关于Oracle绑定变量 摘自--Oracle 11g concept 中英文对照版 使用了绑定变量能提高性能主要是因为这样做可以尽量避免不必要的硬解析而节约了时间,同时节约了大量的CPU资源. 绑定 ...

  4. oracle数据库insert into,oracle中insert into用法 oracle中insert如何带条件添加数据?

    oracle insert into 脚本怎么写 INSE INTO BOOK(bookid,name,price) VALUES('100123','oracle ',54); 或者 INSE IN ...

  5. oracle环境变量怎么配,oracle环境变量配置-Oracle

    用oracle帐号登录,配置相关环境变量: vi .bash_profile export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/ap ...

  6. oracle中col 的用法,Oracle中的SUM用法讲解,

    Oracle中的SUM用法讲解, Oracle中的SUM条件查询 1.按照区域编码分组查询区域编码.IPTV_NBR不为空的数量.ACC_NBR不为空的数量.所有用户数量 SELECT AREA_CO ...

  7. 解决oracle绑定变量重复,基于ORACLE SQL优化之绑定变量(4)

    绑定变量的使用过程当中,oracle建议绑定变量的个数不宜太多.目标SQL的SQL文本中的绑定变量个数不宜太多,否则可能会导致目标SQL总的执行时间大幅度的增长.增长的时间主要消耗在执行目标SQL时对 ...

  8. oracle中pivot的用法,oracle中pivot的实现原理和用法

    考试大Oracle站整理: 1. 11g之前的行列转换面试 领袖又说了:"温故而知新".那就让咱们先看看11g之前是怎么实现地.行列转换一直看成甄别老手和新手的试金石,面试的时候面 ...

  9. oracle and not 的用法,[ORACLE]详解not in与not exists的区别与用法(not in的性能并不差!)...

    在网上搜了下关于oracle中not exists和not in性能的比较,发现没有描述的太全面的,可能是问题太简单了,达人们都不屑于解释吧.于是自己花了点时间,试图把这个问题简单描述清楚,其实归根结 ...

最新文章

  1. 自己动手开发调试器 01
  2. oracle 11gr2 asm安装,OEL6.1下oracle 11gr2 ASM安装
  3. TimeJot – Last Time 改名,新增中文界面、数字属性,还是那个时间线管理神器[Android]
  4. 三维旋转四元数系列(4.四元数三维旋转表达)
  5. 【Elasticsearch】如何使用 Elasticsearch 6.2 搜索中文、日语和韩语文本 - 第 3 部分:语言检测工具
  6. 摄像机跟随与视野调整
  7. 基于DKHadoop的智慧人社服务平台开发案例简述
  8. python plt引用_先引用matplotlib.pyplot再引用tensorflow报错问题
  9. Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码
  10. 分享电脑中截图的五种方法(包括截长图)
  11. 有没有不用加班的程序员?如何衡量程序员的工作量?
  12. Hadoop MapReduce实现人员二度关系运算
  13. NPP++去除文本中的重复行
  14. 关于LocalDate、LocalTime、LocalDateTime
  15. Win10突然就不能连接网络了怎么办
  16. 图像拼接(十一):双摄像头实时拼接+stitching_detailed
  17. windows操作系统支持文件名大小写区分的设置方法
  18. 按月、按天计算失效日期的代码实现
  19. 美萍网管大师数据库资料存取方法
  20. 人工智能程序——猴子摘香蕉(C语言)

热门文章

  1. 2017.3.6~2017.3.7 Harry And Magic Box 思考记录(特别不容易)
  2. RELL软件测试初学者化妆品,浅析软件测试流程在高校软件测试工作室中的应用...
  3. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(4) - 32位EFLAGS - 状态标志与控制标志
  4. MySQL令人咋舌的隐式转换
  5. 歌德语言证书c1考什么,Goethe-Zertifikat C1 (歌德中级证书C1)考试细则 2010.2.1版.pdf...
  6. Grand Central Dispatch(GCD)
  7. Tensorflow图像处理以及数据读取
  8. 整数存储方法和做题中部分数值方法
  9. iOSQuart2D绘图之UIImage简单使用
  10. 父元素与子元素的width关系