【Oracle】集合(联合数组(索引表),嵌套表,变长数组,记录类型的嵌套表)的初始化与赋值,以及它们的区别
来源:互联网 发布:手机游戏存档软件 编辑:程序博客网 时间:2024/05/11 00:36
--其中嵌套表与变长数组在赋值之前必须初始化,可以使用与集合类型同名的函数来进行初始化,联合数组无需初始化
--2.嵌套表的初始化1
--嵌套表的下标默认为1开始,也可以自己指定任意值
--3.嵌套表和的初始化2
--4.变长数组类似于PL/SQL表,每个元素都被分配了一个连续的下标,从1开始
--4.变长数组的初始化(与嵌套表的初始化方式一样)
--5.集合与集合之间的赋值必须是相同的TYPE
--6.使用null值为集合赋值
--7.超出变长数组长度的值将会被丢弃
--8.记录类型的嵌套表的初始化,赋值以及元素的引用
--1.联合数组:
DECLARE TYPE ind_tab_type IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER; ind_tab ind_tab_type;BEGIN ind_tab(1) := 'lubinsu';--这里的下标可以随意指定,可以通过循环来获取 ind_tab(2) := 'luzhou'; --dbms_output.put_line(ind_tab(0)); --dbms_output.put_line(ind_tab(1)); FOR i IN ind_tab.first..ind_tab.last LOOP dbms_output.put_line('ind_tab(' || i || '):' || ind_tab(i)); END LOOP;END;/
--2.嵌套表的初始化1
--嵌套表的下标默认为1开始,也可以自己指定任意值
DECLARE TYPE nest_tab_type IS TABLE OF VARCHAR2(2000) NOT NULL; --如果设置not null条件那么在初始化的时候不可以设置null nest_tab nest_tab_type := nest_tab_type('lubinsu', 'luzhou'); --初始化的时候只要在集合变量之后使用空的构造函数或者直接赋值即可BEGIN FOR i IN nest_tab.first .. nest_tab.last LOOP dbms_output.put_line('nest_tab(' || i || ') value is ' || nest_tab(i)); END LOOP;END;/
--3.嵌套表和的初始化2
DECLARE TYPE nest_tab_type IS TABLE OF VARCHAR2(2000) NOT NULL; --如果设置not null条件那么在初始化的时候不可以设置null nest_tab nest_tab_type := nest_tab_type(); --初始化的时候只要在集合变量之后使用空的构造函数或者直接赋值即可BEGIN nest_tab.extend; nest_tab(1) := 'lubinsu'; nest_tab.extend; nest_tab(2) := 'luzhou'; FOR i IN nest_tab.first .. nest_tab.last LOOP dbms_output.put_line('nest_tab(' || i || '):' || nest_tab(i)); END LOOP;END;/--如果设置not null条件那么在初始化的时候不可以设置null,如:nest_tab(1) := null;否则出错提示;ORA-06550: line 7, column 18:PLS-00382: expression is of wrong typeORA-06550: line 7, column 3:PL/SQL: Statement ignored--赋值的时候必须使用extend来扩展集合的容量否则会如下错误ERROR at line 1: ora-06533: subscript beyond count ora-06512: at line 6/
--4.变长数组类似于PL/SQL表,每个元素都被分配了一个连续的下标,从1开始
--4.变长数组的初始化(与嵌套表的初始化方式一样)
DECLARE TYPE varray_tab_type IS VARRAY(10) OF VARCHAR2(2000); varray_tab varray_tab_type := varray_tab_type('lubinsu', 'luzhou'); --初始化的时候只要在集合变量之后使用空的构造函数或者直接赋值即可BEGIN varray_tab.extend; varray_tab(3) := 'zengq'; varray_tab.extend; varray_tab(4) := 'buwei'; FOR i IN varray_tab.first .. varray_tab.last LOOP dbms_output.put_line('varray_tab(' || i || '):' || varray_tab(i)); END LOOP;END;/
--5.集合与集合之间的赋值必须是相同的TYPE
DECLARE TYPE type1 IS TABLE OF NUMBER(2); TYPE type2 IS TABLE OF NUMBER(2); type1_tab type1 := type1(1, 2, 3); type1_tab2 type1 := type1(4, 5, 6); type2_tab type2 := type2(3, 2, 1);BEGIN type1_tab2 := type1_tab; --type1_tab2 := type2_tab; 不可用 FOR i IN type1_tab2.first .. type1_tab2.last LOOP dbms_output.put_line('type1_tab2(' || i || '):' || type1_tab2(i)); END LOOP;END;/--type1_tab2 := type2_tab;报错ORA-06550: line 10, column 17:PLS-00382: expression is of wrong typeORA-06550: line 10, column 3:PL/SQL: Statement ignoredRESULT:type1_tab2(1):1type1_tab2(2):2type1_tab2(3):3/
--6.使用null值为集合赋值
DECLARE TYPE type1 IS TABLE OF NUMBER(2); type1_tab type1 := type1();--已经初始化,不为空,虽然没有赋值 type1_tab2 type1;--未初始化,为空BEGIN IF type1_tab IS NOT NULL THEN dbms_output.put_line('type1_tab is not null'); END IF; --type1_tab := NULL; --或者 type1_tab := type1_tab2; IF type1_tab IS NULL THEN dbms_output.put_line('type1_tab is null'); END IF;END;/
--7.超出变长数组长度的值将会被丢弃
--8.记录类型的嵌套表的初始化,赋值以及元素的引用
DECLARE TYPE object_rec IS RECORD( object_id all_objects_loc.object_id%TYPE, object_name all_objects_loc.object_name%TYPE, object_type all_objects_loc.object_type%TYPE); TYPE object_tab_type IS TABLE OF object_rec; object_tab object_tab_type; TYPE obj_cur_type IS REF CURSOR; --声明游标变量类型 obj_cur obj_cur_type;BEGIN OPEN obj_cur FOR SELECT a.object_id, a.object_name, a.object_type FROM all_objects_loc a WHERE rownum <= 10; FETCH obj_cur BULK COLLECT INTO object_tab; CLOSE obj_cur; FOR i IN 1 .. object_tab.count LOOP dbms_output.put_line('object_tab(' || i || '):' || object_tab(i) .object_id || ',' || object_tab(i).object_name || ',' || object_tab(i) .object_type); END LOOP;END;/
- 【Oracle】集合(联合数组(索引表),嵌套表,变长数组,记录类型的嵌套表)的初始化与赋值,以及它们的区别
- Oracle集合(联合数组(索引表),嵌套表,变长数组,记录类型的嵌套表)的初始化与赋值,以及它们的区别
- 集合(索引表,嵌套表,变长数组)
- oracle:变长数组varray,嵌套表,集合
- Oracle复合类型:嵌套表、可变数组与索引表
- Oracle 10g复合数据类型pl/sql集合学习六——索引表、嵌套表、变长数组
- PL/SQL 嵌套表变长数组和索引表[转]
- PL/SQL 联合数组与嵌套表
- PL/SQL 联合数组与嵌套表
- oracle 复合类型 (索引表,嵌套表,数组array)
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- Oracle三种集合数据类型(索引表,嵌套表,VARRAY 数组)的比较-PLSQL—之三
- ORACLE 集合(关联数组,嵌套表,VARRAY)
- 嵌套表,索引表,集合的学习
- oracle 三种集合数据类型【varray,嵌套表,联合数组】+record
- PL/SQL 联合数组与嵌套表
- 多维数组、嵌套结构的初始化
- 一个解决绘图闪动的经验
- iPhone音乐软件Jam:美国版“唱吧”
- 各反对赛得分机会进
- MFC中经常出错的地方
- sql中文乱码解决
- 【Oracle】集合(联合数组(索引表),嵌套表,变长数组,记录类型的嵌套表)的初始化与赋值,以及它们的区别
- 联合编译器IncrediBuild
- Android读取中文文件乱码解决方法
- 动态编译 busybox
- On Dynamic Sampling
- Java导出信息到Excel的工具类
- VC 执行DOS命令 管道
- Oracle 10G AWR报告生成步骤
- 标签的功能完成