oracle这么强大的数据库能使用数组的
在瑞金等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、做网站 网站设计制作定制开发,公司网站建设,企业网站建设,成都品牌网站建设,成都全网营销推广,成都外贸网站建设公司,瑞金网站建设费用合理。
在oracle中,数组主要是用来存储批量数据,一次性的对数据库进行插入,更新,删除操作。
下面给你一个批量插入的例子,其他都类似的
这是我的blog上面有例子,你自己看看吧。
除了构造函数外,集合还有很多内建函数,这些函数称为方法。 调用方法的语法如下: collectionmethod 下表中列出oracle中集合的方法 方法 描述 使用限制 COUNT 返回集合中元素的个数 DELETE 删除集合中所有元素 DELETE() 删除元素下标为x的元素oracle怎么使用数组
declare
--定义IntArray 类型,该类型是每个元素为int类型的数组
Type IntArray is table of int;
--定义一个IntArray 类型的变量
v_array IntArray := IntArray();
begin
--向数组中存入数据
for i in 1.. 100 loop
--需要扩展数组
v_array.extend;
v_array(i) := i;
end loop;
--输出数组的内容
for i in 1.. 100 loop
dbms_output.put_line(v_array(i));
end loop;
end;
SQL set serverout on;
SQL declare
2 --定义IntArray 类型,该类型是每个元素为int类型的数组
3 Type IntArray is table of int;
4 --定义一个IntArray 类型的变量
5 v_array IntArray := IntArray();
6 begin
7 --向数组中存入数据
8 for i in 1.. 100 loop
9 --需要扩展数组
10 v_array.extend;
11 v_array(i) := i;
12 end loop;
13
14 --输出数组的内容
15 for i in 1.. 100 loop
16 dbms_output.put_line(v_array(i));
17 end loop;
18 end;
19 /
1
2
3
4
5
6
7
8
9
10
此处省略90行
PL/SQL procedure successfully completed
SQL
ORACLE在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。
集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:
可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。
嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。
type intarray is varry(30) of integer;
A intarray;
TYPE T_EMP IS TABLE OF EMP%ROWTYPE INDEX BY BINARY_INTEGER;
A_EMP T_EMP;
I BINARY_INTEGER := 0;
FOR REC IN (SELECT EMPNO,ENAME FROM EMP) LOOP
I := I + 1;
A_EMP(I).EMPNO := REC.EMPNO;
END LOOP;
l:= A_EMP.first;--使用first方法
loop
exit when l is null;
dbms_output.put_line(l||’:’|| A_EMP(l).ENAME );
l:=A_EMP.next(l);
end loop;
pl/sql预定义了在varray 和嵌套表实例上进行调用的方法。这些方法能在集合上执行一定的功能。
EXISTS该函数返回集合中第一个元素的索引,如果集合为空,返回NULL
Collection.EXISTS(index)
COUNT该函数集合元素的数目
Collection.COUNT
DELETE该过程从嵌套表中删除一个或多个或合部元素
Table_name.DELETE 删除所有元素
Table_name.delete(index)删除指定索引的记录
Table_name.delete(start_index,end_index)删除区间内元素
FIRST返回集合第一个元素索引,如果集合为空,返回NULL
Collection.FIRST
LAST返回集合中最后一个元素索引,如果集合为空,返回NULL
Collection. LAST
NEXT返回集合当前元素的下一个元素的索引,如果它不存在就返回NULL
Collection. NEXT
PRIOR返回集合当前元素的上一个元素的索引,如果它不存在就返回NULL
Collection. PRIOR
LIMIT返回varray中创建元素的最大个数
Collection. LIMIT
EXTENDS该过程在集合的末尾添加新的元素
Collection.EXTEND添加一个NULL元素;Collection.extends(n)添加N个NULL元素,Collection.extend(n,index)添加由index指定位置上元素的n个副表
TRIM从集合末尾处删除元素
Collection.TRIM 删除最后一个元素
Collection.TRIM(n)删除最后N个元素
返回字符数组。
CREATE OR REPLACE TYPE role_name_tb_type is table of varchar2(128)
/*============================================*
* Author : SANFU
* Created : 2020-08-25 17:34:59
* ALERTER :
* ALERTER_TIME :
* Purpose : 获取字符数组
* Obj_Name : GET_STRARRAY
* Arg_Number : 2
* AV_STR : 要分割的字符串
* AV_SPLIT : 分隔符号
*============================================*/
FUNCTION get_strarray(av_str VARCHAR2, --要分割的字符串
av_split VARCHAR2 --分隔符号
) RETURN role_name_tb_type IS
v_av_str VARCHAR2(100) := av_str; --要切割的字符串
v_av_split VARCHAR2(100) := av_split; --分割符
v_length NUMBER;
--TYPE role_name_tb_type is table of varchar2(128);
role_name_tb role_name_tb_type := role_name_tb_type();
BEGIN
v_length := scmdata.sf_import_company_users_pkg.get_strarraylength(v_av_str,
v_av_split);
FOR i IN 0 .. (v_length - 1) LOOP
--扩展数组
role_name_tb.extend;
SELECT scmdata.sf_import_company_users_pkg.get_strarraystrofindex(v_av_str,
v_av_split,
i)
INTO role_name_tb(role_name_tb.count)
FROM dual;
END LOOP;
/* for i in 0 .. (v_length - 1) loop
dbms_output.put_line(role_name_tb(i));
end loop;*/
RETURN role_name_tb;
END get_strarray;
在PL/SQL中是没有数组(Array)概念的,但是如果程序员想用Array的话,可以用TYPE和 Table of Record变通一下,来代替多维数组.