当前位置:首页 > 日记 > 正文

Oracle定义了一个联合数组并使用了技巧。

Oracle定义了一个联合数组并使用了技巧。
关联数组以前被称为PL/sql表,联合数组不能在表中使用,只能用作程序设计的结构。

重要的是要注意与数组有关的一些关键问题是非常重要的,这些问题需要我们在介绍它们的用法时采取一些特殊的方法:

关联数组不需要初始化,也不需要构造函数语法,在分配给它们之前,不需要专门为它们分配存储空间,也不需要使用集合API的扩展方法。

在Oracle 10g中,在Oracle 10g的早期版本中,可以使用数字索引联合数组。此外,在Oracle 10g中,还可以使用具有唯一性的可变长度字符串作为联合数组的索引。

任何整数都可以用作关联数组的索引,这意味着联合数组的索引可以是正的、负的或0个。
等效%ROWTYPE,记录类型和对象类型的返回值可以是显式的转换为一个联邦阵列结构。

结合阵列是使用FORALL语句或散装收集条款的关键,后者允许数据库转换程序设计单位批量转换。
在使用全局设置的数据库,如nls_comp或nls_sort初始化参数,我们需要做特殊处理,当我们使用字符串作为联合数组索引。

1。定义一个联合数组和一个程序结构,用作
有两种语法用于定义联合数组,这是:
创建或替换型type_name
作为element_type {不空表}
指数{ pls_integer binary_integer | | VARCHAR2(大小)};
积极的,消极的,或0值可作为关联数组索引。在Oracle 10g的pls_integer binary_integer类型是不受限制的数据类型。这两个数据类型映射到C / C++调用规范,C和java #。
可变长度字符串的最大长度为4000个字符。
定义联合数组的另一个语法是:
创建或替换型type_name
作为element_type {不空表}
指数key_type;
的key_type允许我们使用VARCHAR2,字符串,或长型。使用VARCHAR2和字符串时,您需要定义的大小。使用长型的时候,你不需要定义的大小,因为它是通过定义VARCHAR(32760)定义。
联合数组不需要初始化,也没有构造函数语法。这是一个地方,从收集的其他两种本质上不同的(VARRAY和嵌套表)。
如果你建立一个联合数组,这样,就会造成pls-00222例外。
复制代码代码如下所示:
-定义字符串的关联数组。
型card_table是表字段(5个字符)
指数binary_integer;
并试图构造一个关联数组。
卡card_table:= card_table(A,B,C);
开始
无效的;
结束;

在前面的介绍,我们知道一个对象的构造函数可以作为一个功能完全的。其他集合类型,如VARRAY和嵌套表是对象明确定义构造函数的类型,数组只是一个结构,不是一个对象的类型。因此,它不能显式创建一个构造函数,也可以调用构造函数。
2。联合数组的初始化
我们已经说过,我们可以构造一个数或一个独特的特征为指标的变长字符串的联合数组。例如一个数字指标,是一个整数,它可以是一个正整数,负整数,和一个0值,可变长度的字符串是唯一一个空的字符串数据类型,或长。
1)使用数字作为关联数组的索引。
下面的示例给出了将元素分配到具有数字索引的联合数组的过程。这个例子演示了将动态数组内容联盟阵列的过程。
复制代码代码如下所示:
定义一个动态数组十二串。
型months_varray是动态数组(12)字符串(9个字符);
-定义字符串的关联数组。
型calendar_table是表字段(9个字符)
指数binary_integer;
构建一个动态数组。
月months_varray:=
months_varray('january ','february ','march)
四月,‘愿',6月
七月,'august '、'九月'
十月,'november ','december);
关联数组变量。
日历calendar_table;
开始
-检查日历是否没有元素。
如果calendar.count = 0
-打印标题
dbms_output.put_line('assignment回路:');
dbms_output.put_line(' ----------------);
通过所有的动态数组元素循环。
我在月。第一month.last环..
-初始化空关联数组元素。
日历(i):=;
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |我| |}是{| |日历(我)| |});
指定数字索引值动态数组元素
-等于指数值关联数组元素。
日历(i):=月(i);
结束循环;
-打印标题
dbms_output.put(CHR(10));
dbms_output.put_line('post-assignment回路:');
dbms_output.put_line(' ---------------------);
遍历所有关联数组元素。
我在日历第一.. calendar.last回路。
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |我| |}是{| |日历(我)| |});
结束循环;
最后如果;
结束;
/

在第一for-loop环空值分配给具有相等的动态数组类型的月指数指标值的联合数组类型的历变。这是一个联合数组分配空间的唯一途径。
2)使用唯一字符串作为索引索引。
如下面的例子所示:
复制代码代码如下所示:
定义一个动态数组十二可变长度字符串。
型months_varray是动态数组(12)字符串(9个字符);
-定义一个可变长度字符串的关联数组。
型calendar_table是表字段(9个字符)
指数VARCHAR2(9个字符);
构建一个动态数组。
月months_varray:=
months_varray('january ','february ','march)
四月,‘愿',6月
七月,'august '、'九月'
十月,'november ','december);
关联数组变量。
日历calendar_table;
开始
-检查日历是否没有元素。
如果calendar.count = 0
-打印标题
dbms_output.put_line('assignment回路:');
dbms_output.put_line(' ----------------);
通过所有的动态数组元素循环。
我在月。第一month.last环..
指定数字索引值动态数组元素
-等于指数值关联数组元素。
日历(月(一)):=;
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |月(我)| |}是{| |我| |});
结束循环;
-打印标题
dbms_output.put(CHR(10));
dbms_output.put_line('post-assignment回路:');
dbms_output.put_line(' ---------------------);
遍历所有关联数组元素。
我在日历第一.. calendar.last回路。
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |我| |}是{| |日历(我)| |});
结束循环;
最后如果;
结束;

这将运行上面的代码错误。ora-06502:PL / SQL:数值或数值错误:字符数字转换错误。没有问题在初始化在第一for-loop.in二for-loop环,然而,程序试图通过非数字值的计数器变量在程序上。计数器变量,即数据类型的计数器变量被定义为pls_integer型。因此,整个长字符串的索引值不能被分配给一个整数变量,因为变量长度的字符串不是一个整数。当然,类型转换错误ora-06502是由自然原因引起的,例如原因是,计数器变量转换为VARCHAR2类型初始化时的联盟l当工会成员,并读取数组,反式转换为整数型。
这实际上给了我们一个新的问题:非数字索引值要求我们知道索引的初始值和索引的增加方法。
如下面的例子所示:
复制代码代码如下所示:
-定义变量以遍历关联数组
为索引值使用可变长度字符串。
目前VARCHAR2(9个字符);
元整;
定义一个动态数组十二可变长度字符串。
型months_varray是动态数组(12)字符串(9个字符);
-定义一个可变长度字符串的关联数组。
型calendar_table是表字段(9个字符)
指数VARCHAR2(9个字符);
构建一个动态数组。
月months_varray:=
months_varray('january ','february ','march)
四月,‘愿',6月
七月,'august '、'九月'
十月,'november ','december);
关联数组变量。
日历calendar_table;
开始
-检查日历是否没有元素。
如果calendar.count = 0
-打印标题
dbms_output.put_line('assignment回路:');
dbms_output.put_line(' ----------------);
通过所有的动态数组元素循环。
我在月。第一month.last环..
指定数字索引值动态数组元素
-等于指数值关联数组元素。
日历(月(我)):= to_char(我);
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |月(我)| |}是{| |我| |});
结束循环;
-打印标题
dbms_output.put(CHR(10));
dbms_output.put_line('post-assignment回路:');
dbms_output.put_line(' ---------------------);
遍历所有关联数组元素。
我在1 calendar.count环..
-检查循环中的第一个元素。
如果我= 1然后
-将第一个字符索引分配给变量。
电流:= calendar.first;
使用派生索引查找下一个索引。
元素:=日历(当前);
其他的
-检查下一个索引值是否存在。
如果calendar.next(电流)不为空,则
将字符索引分配给变量。
电流:= calendar.next(电流);
使用派生索引查找下一个索引。
元素:=日历(当前);
其他的
-自上次索引值读取后退出循环。
出口;
最后如果;
最后如果;
-从关联数组中打印索引元素。
dbms_output.put_line(
指数{| |电流| |}是{| |元| |});
结束循环;
最后如果;
结束;

三.使用组合阵列与散装收集所有
使用散装收集所有胃我们打开消除线路电平处理门。使用散装收集得到一个记录集存储在联合数组和嵌套表。使用所有可以在batch.forall DML语句可以插入、更新和删除数据。这些方法减少次数切换上下文环境来回的PL / SQL引擎和SQL引擎。没有这些方法,会有太多的解析或数值。
你应该记住,线级别的处理实际上是使用%ROWTYPE %统前可以直接映射到记录type.bulk收集可以分配的一套%ROWTYPE或%型值作为集合的联合数组和嵌套table.forall提供了一种方法来转移的联合数组的内容或嵌套表对数据库对象。
和嵌套表的集合类型的组合可以用于批量收集所有组合。使用嵌套表的时候,你需要构建嵌套表作为一套空elements.bulk收集明确指定嵌套表的存储空间,不需要构建一个全局数组,只要批量赋值可用。以同样的方式,两者的联合数组和嵌套表可以作为SQL命令所有源结构。
如下面的示例所示:
复制代码代码如下所示:
-为示例创建一个表。
创建表bulk_numbers
(number_id数不为空
number_id_pk主键约束(number_id));
-定义一个整数的关联数组。
型number_table是表bulk_numbers number_id分型。
指数binary_integer;
-定义关联数组类型的变量。
number_list number_table;
开始
循环从1到一百万和增量关联数组。
对于我在1….. 10000圈
-赋值数值。
number_list(I):=我;
结束循环;
-循环通过所有来执行批量插入。
就我number_list.count 1 ..
插入
为bulk_numbers
值(number_list(我));
-提交记录。
承诺;
结束;
使用批量收集将表检索到
-关联数组。
-定义一个整数的关联数组。
型number_table是表bulk_numbers number_id分型。
指数binary_integer;
-定义关联数组类型的变量。
number_list number_table;
开始
-检查日历是否没有元素。
选择number_id
散装收集
为number_list
从bulk_numbers;
-打印标题
dbms_output.put_line('bulk收集的);
dbms_output.put_line(' ---------------);
循环打印元素。
-只打印前两个和最后两个记录
我在number_list第一.. number_list.last回路。
只打印第一个和最后两个。
如果我= 9999然后
-从关联数组中打印索引元素。
dbms_output.put_line(若干{| | number_list(我)| |});
最后如果;
结束循环;
结束;

在批量收集子句中,订单用于确保结果按升序排列。如果没有对元素进行排序,则发现它们是按随机顺序而不是按数字顺序获得的。

相关文章

如何复制朋友的QQ空间照片

如何复制朋友的QQ空间照片

照片,空间,朋友,电脑软件,QQ,输入好友的QQ空间,点击上导航,相册打开其中一张相册,找到你要转载的照片,点击去我的空间,并按提示操作: 注: 1,朋友的相册必须是开放的,并允许重印; 2、转载照片后,朋友将不会收到任何提示; 3,只有在QQ空间相册中有这个…

通用安装包在windows系统中的作用

通用安装包在windows系统中的作用

系统,安装包,通用,作用,电脑软件,点评:长期等待Windows系统更新是非人的折磨,那么解决系统安装问题的方法是什么呢Windows系统中的通用安装包可以很容易地帮助我们解决这个问题。下面是安装的具体功能。 长期等待Windows系统更新是非人为的…

MySQL优化表和修复表命令使用指令(

MySQL优化表和修复表命令使用指令(

优化,指令,命令,选项卡,电脑软件,复制代码代码如下所示: 修表` table_name `修表 优化表` table_name `优化表 修理台是用来修理破损的桌子的。 优化数据库中空闲空间恢复的表,当删除表中的数据时,磁盘空间不能立即恢复,在空间被回收后使用优…

通用数据类型描述

通用数据类型描述

数据类型,描述,通用,电脑软件,类型 意义 存储描述 评论 烧焦 固定长度的字符串 最大长度2000bytes U3000 VARCHAR2 可变长度字符串, 最大长度4000bytes 可以索引的最大长度749。 NCHAR 基于字符集的固定长度字符串 最大长度2000bytes U30…

QQ号被限制登录提示不能解除,我该怎

QQ号被限制登录提示不能解除,我该怎

登录,提示,我该,怎么处理,电脑软件,如果您的号码遇到这种情况,则是由于在使用QQ号码时发生非法操作或非法信息,这影响了正常用户的使用。现在我们公司已经限制了登录号码,建议您申请新的QQ号码。为了创建互联网绿色网络环境,请遵守国家互联网相…

QQ签名可爱的废话

QQ签名可爱的废话

废话,可爱,电脑软件,QQ,QQ签名可爱的废话,不知道能不能让你笑看完他们,应该有一个可以笑。 1。那些爱我的人,我不爱,那些不爱我的人踢死了。 2。女人胖丰满,瘦瘦,高苗条,矮秀气,胖男人胖,瘦猪肉,竹竿高,瓜短。 三.rarr;两只老虎,两只老虎,真变态,真变态。…

如何给朋友一个秘密礼物

如何给朋友一个秘密礼物

给朋友,礼物,秘密,电脑软件,登录到你的QQ空间,点击个人中心,找到在中页;礼物;礼物;(现在也给了5个朋友)你必须选择朋友和礼物后的礼物;秘密礼物;点击前点击可以呈现。 注意:你送的秘密礼物只有你和收件人可以看到。…

在win7进入恐怖的黎明游戏后,有一个

在win7进入恐怖的黎明游戏后,有一个

屏幕,溶液,有一个,黑色,恐怖,问题: 我的电脑装了win7 64系统,安装了一个恐怖的黎明的游戏,进入游戏后即可有黑,和同宿舍的另一台计算机上安装相同的恐怖黎明的游戏,但正常发挥,计算机安装win7 32系统,这是游戏WIN7不支持64位系统吗 答案uff1a wi…

让Word只粘贴网页中的文字,并自动删

让Word只粘贴网页中的文字,并自动删

网页,文字,图形,删除,布局,Method 1, select the web page content needed and press ldquo, Ctrl+C; key copy, open Word, select menu ldquo, edit , rarr, ldquo, paste selectively, select ldquo in the dialog box appearing, and …

腾讯PAD管理器(iPad)的功能是什么

腾讯PAD管理器(iPad)的功能是什么

腾讯,管理器,功能,电脑软件,PAD,腾讯PAD管理器(iPad)包含以下功能: 主要功能 基本介绍 电池的维护 显示可用时间:根据当前电源显示可用时间,在各种用途上,让你有一个好的头脑。 全充电:帮您完成全部充电,每月至少完成一次充电量,有助于发挥电池最…

对sxgdsenu.exe-使用sxgdsenu是什

对sxgdsenu.exe-使用sxgdsenu是什

电脑软件,sxgdsenu,exe,点评:sxgdsenu.exe是雅马哈雅马哈山仙颗粒声卡配置和诊断程序。 进程文件:sxgdsenu或sxgdsenu.exe 进程名称:雅马哈ssxgdsenu 过程类别:安全风险的过程 英文描述: sxgdsenu.exe安装在雅马哈山仙颗粒声卡的驱动程序和规…

完成Linux计划任务的步骤

完成Linux计划任务的步骤

步骤,计划任务,电脑软件,Linux,评论:本文主要介绍Linux计划任务的步骤,您需要的朋友可以参考一下。 一次性计划任务的安排:在指定时间执行任务(通常是随时间进行)。 批处理:在系统负载不重时调度执行任务 第一步:#服务启动时打开一个一次性计划…