oracle集合

1初识集合

集合是oracle中的一种数据类型 存放一组数据类型相同的数据

集合组成

由下标和值组成

下标的类型包含数字(整数,pls_integer,binary_integer)和字符串

值的类型可以是数据库中的所有类型(基本数据类型,记录类型(record,%rowtype),%type,集合类型)

集合三种类型

索引表可以通过数字或字符串作为下标来查找其中的元素,仅在pl/sql中使用

嵌套表拥有索引表的所有特性,但是下标只能是数字类型(连续的整数)

可以在plsql中使用也可以在数据库中使用

变长数组下标只能是数字类型,创建时需要指定最大长度

可以在plsql中使用也可以在数据库中使用

2索引表类型

2.1语法

定义一个索引表类型

type 类型名称 is table of 元素值的数据类型 index by 下标的数据类型;

索引变量的声明

变量名 类型名;

索引变量的使用

变量名(下标);

2.2简单使用declare

--定义一个索引表类型

type itype is table of varchar2(30) index by pls_integer;

--声明一个集合变量

ind itype;

begin

ind(1):='张三';

ind(4):='李四';

dbms_output.put_line(ind(4)||','||ind(1));

end;

输出李四,张三

3集合的属性或方法

3.1属性或方法简单汇总first取集合第一个元素的下标

last取集合元素最后一个元素的下标

next(下标)取集合当前下标的下一个元素的下标

prior(下标)取集合当前下标的上一个元素的下标

count取集合中元素的个数

delete删除集合中的元素

limit取集合最大的元素的个数(变长数组)

3.2属性或方法示例declare

--定义一个集合类型

type itype is table of varchar2(30) index by varchar2(30);

--声明一个索引表

eng itype;

begin

--给索引表赋值

eng('a'):='张三';

eng('b'):='李四';

eng('c'):='王五';

eng('d'):='赵六';

--打印集合中第一个元素的下标

dbms_output.put_line('第一个元素的下标: '||eng.first);

--打印集合中最后一个一个元素的下标

dbms_output.put_line('最后一个元素的下标: '||eng.last);

--打印集合中第二个元素的下标

dbms_output.put_line('第二个元素的下标: '||eng.next(eng.first));

--打印集合中倒数第二个元素的下标

dbms_output.put_line('倒数第二个元素的下标: '||eng.prior(eng.last));

--打印集合中元素的个数

dbms_output.put_line('元素个数: '||eng.count);

end;

输出第一个元素的下标: a

最后一个元素的下标: d

第二个元素的下标: b

倒数第二个元素的下标: c

元素个数: 4declare

--定义一个集合类型

type itype is table of varchar2(30) index by varchar2(10);

--定义一个变量保存集合的下标

v_ind varchar(10);

--声明一个索引表

eng itype;

begin

--给索引赋值

eng('a'):='张三';

eng('b'):='李四';

eng('c'):='王五';

eng('d'):='赵六';

--遍历打印集合中的元素

--将第一个元素的下标放入变量v_ind中

v_ind:=eng.first;

loop

--打印集合元素

dbms_output.put_line(eng(v_ind));

--判断退出条件,当下标的值等于最后一个下标的值

exit when v_ind=eng.last;

--循环控制语句

v_ind:=eng.next(v_ind);

end loop;

end;

输出:张三

李四

王五

赵六

4bulk collect语句循环遍历

集合提供了bulk collect语句获取表中数据

通过bulk colleck语句存入集合中的元素下标从1开始并且是连续的

4.1语法1

select 列.. bulk collect into 集合变量 from 表 where条件

获取emp表中30部门中的员工号和姓名declare

--定义索引表集合存储emp表中empno和ename

type i_empno is table of emp.empno%type index by pls_integer;

type i_ename is table of emp.ename%type index by pls_integer;

--定义索引变量

eno i_empno;

eme i_ename;

begin

--bull collect语句获取empno和ename

select empno,ename bulk collect into eno,eme from emp where deptno=30;

for i in eno.first..eno.last loop

dbms_output.put_line(eno(i)||eme(i));

end loop;

end;

输出7499ALLEN

7521WARD

7654MARTIN

7698BLAKE

7844TURNER

7900JAMES

4.2语法2

execute immediate 'select语句' bulk collect into 集合变量

获取emp表中30部门中的员工号和姓名declare

--声明一个变量存放selqct查询结果

v_sql varchar2(255);

--定义索引表集合存储emp表中empno和ename

type i_empno is table of emp.empno%type index by pls_integer;

type i_ename is table of emp.ename%type index by pls_integer;

--定义索引变量

eno i_empno;

eme i_ename;

begin

--将sql语句赋值给v_sql

v_sql:='select empno,ename from emp where deptno=30';

--bulk collect语句,将v_sql查询到的结果放到eno和eme中

execute immediate v_sql bulk collect into eno,eme;

--循环打印eno和eme中所有的数据

for i in eno.first..eme.last loop

dbms_output.put_line(eno(i)||eme(i));

end loop;

end;

输出7499ALLEN

7521WARD

7654MARTIN

7698BLAKE

7844TURNER

7900JAMES

4.3语法3

fetch 游标 bulk collect into 集合变量

获取emp表中30部门中的员工号和姓名declare

--声明一个游标

cursor cur is select empno,ename from emp where deptno=30;

--声明集合,存放empno和ename

type i_empno is table of emp.empno%type index by pls_integer;

type i_ename is table of emp.ename%type index by pls_integer;

--声明索引变量

eno i_empno;

eme i_ename;

begin

--打开游标

open cur;

--bulk collect语句,将cur查询到的结果放到eno和eme中

fetch cur bulk collect into eno,eme;

--关闭游标

close cur;

--循环打印出eno和eme集合中的所有数据

for i in eno.first..eno.last loop

dbms_output.put_line(eno(i)||','||eme(i));

end loop;

end;

输出7499,ALLEN

7521,WARD

7654,MARTIN

7698,BLAKE

7844,TURNER

7900,JAMES

数据集合 oracle,oracle集合相关推荐

  1. Oracle 语言分类 数据类型 数据类型转换 常用函数 集合操作 子查询

    SQL分类 SQL(Structure Query Language)语言是数据库的核心语言.SQL语言共分为四大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL.1 ...

  2. oracle有集合为什么要用游标,oracle 游标使用

    游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情况,我们所说的游标都是指显式游标. 要在程序中使用游标,必须首先声明游标分类: 1.静 ...

  3. oracle union all写法,【oracle】-集合运算:UNION,UNION ALL...

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:求并,重复记录只显示一次. UNION ALL:求并集,显示所有记录信息. INT ...

  4. 5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算

     1  Oracle基于用户的管理方案 2 DDL语句可以管理数据库的对象有:视图   索引  序列  同义词   约束 3  创建一个表,有2个条件(1 有权限:2有表空间) Oracle给你提 ...

  5. oracle的集合操作符,[Oracle] Oracle的集合操作符

    Oracle的集合操作包括: union , intersect , minus. [例子] 假设有两个表a,b如下: SQL> select * from a; COLA ---------- ...

  6. oracle 数据执行计划,Oracle 常见的执行计划步骤(explain结果的Description数据参考)...

    在PL/SQL中 执行explain plain for  select ... 查看Description 数据参考: Oracle常见的执行计划步骤 这里我们介绍一些常见的执行计划中的步骤及算法. ...

  7. sqlldr,将数据批量导入Oracle数据库

    哈喽,大家好,今天分享一个如何把文本数据快速导入到Oracle数据库的一个方法. 首先介绍一下sqlldr工具,它是由Oracle提供,专本用于把文本数据导入到Oracle数据库.它需要两个文件,一个 ...

  8. 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?

    Oracle数据库作为目前市场的主流数据库之一,许多应用都在其上进行开发,由于Oracle数据库更新换代的原因和不同的应用程序提供商,可能会造成在一个单位的应用中存在Oracle的几种版本,如Orac ...

  9. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...

    c#如何将dataset中的数据批量导入oracle数据库以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#如何将da ...

最新文章

  1. Ubuntu 调试的时候,不能查看变量值
  2. Linux /dev目录详解和Linux系统各个目录的作用
  3. 小程序如何传数组数据到vs后台中
  4. 工具_HBuilder使用快捷方式
  5. c mysql ssh_c ssh mysql数据库
  6. P2548 [AHOI2004]智能探险车
  7. Linux命令----cat
  8. JDI考虑让日本国内部分工厂停工 因苹果公司需求低迷
  9. 以某种结构遍历添加的基础类
  10. python字典统计排序 统计各省份大学数量_1641统计字典排序元音字符串的数量(递归,递归),数目,递推...
  11. 设置Session超时的三种方法
  12. Idea使用SVN下载运行项目
  13. 【第三方互联】2、创建腾讯QQ互联应用
  14. 利用计算机进行有理数的运算教学反思,有理数乘法分配律教学反思
  15. RStudio的安装
  16. 不占广告位增加网站收入揭秘
  17. 面渣逆袭:计算机网络六十二问,三万字图文详解
  18. Dijkstra——去北京看奥运
  19. Flickr和DasBlog以及地理标记和EXIF等等
  20. SEO现状:网络营销之SEO骗子多(转)

热门文章

  1. 高可用集群中的选举机制
  2. zabbix报错:Zabbix服务启动不了
  3. Android 线性布局(LinearLayout)相关官方文档 - 布局參数部分
  4. java json格式的转换和读取
  5. Android应用程序键盘(Keyboard)消息处理机制分析(8)
  6. linux上修改ssh密码和mysql密码
  7. SQL优化避免索引失效
  8. 十种机制保护三大网络基础协议(BGP、NTP和FTP)—Vecloud微云
  9. 关于 PHP 与 MYSQL的链接
  10. [转]Java中Runtime.exec的一些事