oracle中要怎么使用数组

这是我自己写的一个存储过程,主要就是想知道这个oracle中是怎样使用数组的
create or replace procedure tests is TYPE back_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
style_array back_array;begin style_array(1) := 'proApproval'; style_array(2) := 'adverAtcc'; style_array(3) := 'adverReport'; style_array(4) := 'bidAtcc'; for i in 1..style_array.count loop DBMS_OUTPUT.PUT_LINE('i='|| i || ', style_array= ' ||style_array(i)); end loop;end;
可是执行的时候报这个错误

我想问下这个问题要怎么解决。。。请大神们帮忙。。。

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个元素
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-03-07

错误是因为你用的是 NUMBER类型,却赋值了 字符类型,导致错误!!将 NUMBER改为VARCHAR2(100) 就可以了!!

本回答被提问者和网友采纳
第2个回答  2014-06-23
oracle里面不叫数组,叫游标,游标可以有多个追问

那我要怎么写,才能正确执行呢?

oracle中要怎么使用数组
EXISTS该函数返回集合中第一个元素的索引,如果集合为空,返回NULL Collection.EXISTS(index)COUNT该函数集合元素的数目 Collection.COUNT DELETE该过程从嵌套表中删除一个或多个或合部元素 Table_name.DELETE 删除所有元素 Table_name.delete(index)删除指定索引的记录 Table_name.delete(start_index,end_in...

oracle一个字段怎样like一个数组
使用SQL中的通配符(wildcard)和IN子句来实现。假设有一个表格名为table_name,其中包含一个字段名为field_name,要匹配的数组是包含多个值的,例如,要匹配field_name字段的值是否包含数组{value1,value2,value3}中的任意一个。

oracle中的存储过程可以用数组吗
--数组的应用DECLARE TYPE TYPE_TAB IS TABLE OF VARCHAR(10) INDEX BY BINARY_INTEGER; MYARR TYPE_TAB; BEGIN FOR INX IN 1..3 LOOP SELECT COL_TWO INTO MYARR(INX-1) FROM TAB_TEST WHERE COL_ONE = INX; DBMS_OUTPUT.PUT_LINE(MYARR(INX-1)); END LOOP;END;

oracle 存储过程,如何传入一个数组
这个是不行的,数组内容必须首先在存储过程里定义好数组类型,然后给予定义好的数据类型定义数组型变量。存储过程的入参是做不到的。一般情况下,采用字符串的方式,并给每项用特定的分隔符的方式传入,然后在存储过程中按照分隔符解析出每一项,插到存储过程的定义的数组的每一项上去。

oracle 数据库 sql语言 数组和表join的方法
PL\/SQL表---table()函数用法:利用table()函数,我们可以将PL\/SQL返回的结果集代替table。oracle内存表在查询和报表的时候用的比较多,它的速度相对物理表要快几十倍。simple example:1、table()结合数组:\/ create or replace type t_test as object(id integer,rq date,mc varchar2(60));creat...

如何实现oracle包中自定义数组的赋值,谢
a(1) := 1;a(2) := 10;a(3) := 100;end;另外数组还有一下方法和属性 first -- 第一个元素下标 last -- 最后一个元素下标 count -- 数组元素个数 prior(n) -- 下标 n 的前一个元素下标 next(n) -- 下标 n 后一个元素下标 extend(n) -- 添加 n 个数组元素,不带参数添加...

ORACLE自定义函数:根据指定分割符号将字符串分割成字符数组
在Oracle数据库中,自定义函数F_SPLITSTR为用户提供了一种方便的方法,用于根据指定的分割符号将字符串拆分成字符数组。下面通过两个示例来展示其使用效果。首先,当你运行如下查询:SELECT COLUMN_VALUE FROM TABLE (F_SPLITSTR('A,B,C,D,E,F,G,H', ','));这段代码将返回字符串'A,B,C,D,...

oracle 某个字段的结果是一个集合,怎么知道这个结果中是否有某个值
第一步:创建你所需的ARRAY类型 Create Type varray_answer as varray(10) of varchar2(50);第二步:把你的sf_split_string函数返回的类型设置为varray_answer 第三步:select era_id, us_id, sf_split_string(answer, ':') as listanswer, tu.name from evt_result_answer, tuser tu ...

Oracle中构造包含数组的表
另一种就是我们如果想直接用构造函数构造一个大字段直接插入 这时候不需要values 但必须用slect:insert into tablename select 构造函数(字段 字段 ) from xxx;创建带方法的类型 首先说方法的定义 如果有返回值 用member function 没有返回值 member procedure 以后再说 可变数组 声明一下Oralce的oop中...

oracle将查询结果放在数组中应使用的语句
这个不用数组吧 一个游标就搞定 先定义一个游标名 并且把BNO和BNAME定义两个变量 v_bno int;v_bname varchar2(256);CURSOR cur_1 IS SELECT BNO,BNAME FROM TABLE_NAME ORDER BY BNO;后边调用时 open cur_1;loop fetch cur_1 into v_bno,v_banem;exit when cur_1%notfound;end ...

相似回答