Oracle中集合的使用
2016-07-28 11:31
351 查看
集合
两个表通常使用外键建立数据之间的关联,相对于这样的方式访问数据库,存储在集合中的数据可以更快的被访问。常用的集合类型:index-by表
嵌套表
可变数组
index-by表
index-by表类似C语言中的数组,但是元素顺序并没有按照特定的顺序排列。元素的个数只受到BINARY_INTEGER的下标大小限制。type tabletype IS table of INDEX BY binaru_interger; --typetable:定义的新类型类型名 --type:定义index-by表的类型 type Country_Name IS table of COUNTRIES.COUNTRIES_NAME%TYPE --声明使用类型 INDEX by binary_integer; --声明变量 v_Name Country_Name; --赋值操作 begin v_Name(1):='China'; v_Name(2):='AnHui'; v_Name(3):='HeFei'; v_Name(-2):='SuZhou'; v_Name(6):='SiXian'; end; |
调用没有赋值的元素
declare type StudyTab IS table of varchar(20) index by binary_integer; v_StudyTab StudyTab; begin --使用循环赋值 for v_Count IN 1..5 Loop v_StudyTab(v_Count):=v_Count*100; end loop; --使用循环取值 for v_Count in 1..6 loop DBMS_OUTPUT.put_line(v_StudyTab(v_Count)); end loop; end; --上面赋值的时候只赋了5个值,但是取值的时候取了6个值,报错 --:未找到数据 |
嵌套表
嵌套表和index-by表相比少了indexby binary_integer子句。这也是区分两种表的区别。
--嵌套表声明语法 type table_name IS table of table_type[not null]; --嵌套表的初始化 declare type StudyTab IS table of varchar(20); v_StudyTab StudyTab:=StudyTab('Tom','Jack','Rose'); begin for v_Count IN 1..3 loop DBMS_OUTPUT.put_line(v_StudyTab(v_Count)); end loop; end; |
该表赋值,那么这个表就是空的,后面可以继续添加
² 嵌套表:声明嵌套表变量类型时,如果表中没有任何元素,会初始化为null,并且
是只读的,如果再添加元素就会出现错误
ERROR
初始化为null后添加元素:引用未初始化的收集
初始化赋值后添加元素:下标超出数量
元素的序列
嵌套表和index-by表很相似,但是嵌套表在结构上是有序的,index-by表是无序的,给嵌套表赋值,下标从1开始,而且依次递增。
declare type NumTab is Table of Numer(4); v_Num NumTab:=NumTab(1,2,4,5,7,9); begin for v_Count IN 1..6 loop DBMS_OUTPUT.put_line('v_Num('||v_Count||')='||v_Num(v_Count)); END LOOP END; |
可变数组
可变数组声明---数组声明语法--- type type_name IS {varray|varying array}(maxinum_size) OF element_type[not null]; --type_name:可变数组的类型名 --maxinum_size:可变数组元素个数的最大值 --element_type:数组元素的类型 ---创建一个数组--- declare --包含星期数组 type Dates IS varray(7) OF varchar2(10); --包含月份数组 type Months IS varray(12) OF varchar2(10); ---数组的初始化--- declare type Dates IS varray(7) OF varchar2(10); v_Dates Dates:=Dates('Monday','Tuesday','Wednesday'); begin DBMS_OUTPUT.put_line(v_Dates(1)); DBMS_OUTPUT.put_line(v_Dates(2)); DBMS_OUTPUT.put_line(v_Dates(3)); end; |
集合的属性和方法
index-by表,嵌套表,可变数组是对象类型,本身具有属性和方法。1. count:返回集合中数组元素的个数
2. delete:删除集合中一个或多个元素
delete—删除所有元素
delete(x)—删除第x位置的元素
delete(x,y)—删除两个位置之间的元素
3. extist:判断集合中元素是否存在
extists(x)—判断x位置的元素是否存在
4. extend把元素添加到集合末端
extend把一个null元素添加到集合中
extend(x)—将x个null元素添加到集合的末端
extend(x,y)—将x个位于y的元素添加到集合的末端
5. first和last:first返回集合的第一个元素位置,last返回集合的最后一个元素位置
6. limit:返回集合中最大元素的个数,嵌套表没有上限,返回null
7. next(x),prior(x):返回x处元素的前后的元素
8. trim:删除几个末端的元素
trim—从几个末端删除一个元素
trim(x)—从几个末端删除x个元素,x小于集合的count总数
declare type Dates IS varray(7) OF varchar2(10); v_Dates Dates:=Dates('Monday','Tuesday','Wednesday'); begin DBMS_OUTPUT.put_line(v_Dates.Count); DBMS_OUTPUT.put_line(V_Dates.last); end; |
相关文章推荐
- oracle数据库修改字符集
- Oracle的数据类型
- Oracle的归档日志
- oracle_导致实例逐出的五大问题
- 解析oracle数据库多种连接方式
- ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column
- SQLSERVER链接到ORACLE失败,错误7302
- centos7下oracle11g详细的安装与建表操作(重复实现多次均没问题)
- ArcCatalog中通过ArcSDE向Oracle数据库中导入数据
- oracle按某个字段分组然后从每组取出最大的一条纪录
- oracle 学习路径
- 87.You are managing an Oracle Database 11g database running in ARCHIVELOG mode. The Flash Recovery A
- Oracle 11g新特性direct path read引发的系统停运故障诊断处理2
- 使用Oracle数据库登录时被告知用户被锁怎么解决
- Oracle 查询中判断语句的写法case when then else end
- Oracle 数据库创建事务级或者会话级的临时表
- oracle数据库导入导出命令!
- Oracle 11G R2 用exp无法导出空表解决方法
- oracle查看和杀死session
- plsql连接oracle通过地址访问