当前位置: 代码迷 >> Oracle开发 >> 存储过程中自定义varray数组解决办法
  详细解决方案

存储过程中自定义varray数组解决办法

热度:13   发布时间:2016-04-24 06:46:38.0
存储过程中自定义varray数组
create or replace procedure proc_selectAnyone()
as
type type_array is varray(11) of varchar2(2);  --定义长度为11的数组
init_array type_array :=type_array('01','02','03','04','05','06','07','08','09','10','11');
 --初始化数组的11个字符
begin
for i in 1..init_array.count loop
    dbms_output.put_line(init_array(i));
end loop;
end proc_selectAnyone;

执行后,出错!
Warning: Procedure created with compilation errors

怎么回事?是oracle存储过程中不让定义数组?但是我在代码块中执行,没问题的!
------解决方案--------------------
把句柄的()去掉。。。代码应该没问题。
------解决方案--------------------
引用:
create or replace procedure proc_selectAnyone()
as
type type_array is varray(11) of varchar2(2);  --定义长度为11的数组
init_array type_array :=type_array('01','02','03','04','05','06','07','08','09','10','11');
 --初始化数组的11个字符
begin
for i in 1..init_array.count loop
    dbms_output.put_line(init_array(i));
end loop;
end proc_selectAnyone;

执行后,出错!
Warning: Procedure created with compilation errors

怎么回事?是oracle存储过程中不让定义数组?但是我在代码块中执行,没问题的!



CREATE OR REPLACE PROCEDURE TEST1 AS
  TYPE TYPE_ARRAY IS VARRAY(11) OF VARCHAR2(2); --定义长度为11的数组
  INIT_ARRAY TYPE_ARRAY := TYPE_ARRAY('01',
                                      '02',
                                      '03',
                                      '04',
                                      '05',
                                      '06',
                                      '07',
                                      '08',
                                      '09',
                                      '10',
                                      '11');
  --初始化数组的11个字符
BEGIN
  FOR I IN 1 .. INIT_ARRAY.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(INIT_ARRAY(I));
  END LOOP;
END TEST1;

------解决方案--------------------
oracle存储过程在没有参数的情况下,不用加()
  相关解决方案