在PLSQL中将新数组值复制到旧数组中

时间:2015-11-19 10:21:37

标签: oracle plsql plsqldeveloper

假设我在One数组中有一些值,我创建了具有相同值的数组2,现在我想用新数组值替换旧数组。 (假设我在新数组值中做了一些更改,我想用新的数组值完全替换旧的aaray值。)

TYPE c_sncode_list      IS VARRAY(10000) OF VARCHAR(1000); 
c_v_sncode              c_sncode_list;
c_v_sncode_update       c_sncode_list;
cou NUMBER := 1;
/* Have c_v_sncode polulated with some value */
FOR J IN c_v_sncode.FIRST .. c_v_sncode.LAST
LOOP
c_v_sncode_update.extend;
c_v_sncode_update(cou) := c_v_sncode(J);
cou := cou + 1;
END LOOP;
c_v_sncode := c_v_sncode_update; -- Is this Correct way?

1 个答案:

答案 0 :(得分:0)

请检查这是否有帮助。

Ur语句是正确的复制,但在for循环中你使用的是未初始化的c_v_sncode,实际上两个数组都没有初始化。这将使你的下标超出数量"错误

在没有使用扩展或在初始化中放置一些值的情况下,你也无法进行循环和数组。这会给你数字或值错误

            declare
            TYPE c_sncode_list      IS VARRAY(10000) OF VARCHAR(1000);  
            c_v_sncode              c_sncode_list; 
            c_v_sncode_update       c_sncode_list  :=  c_sncode_list(1,2,3,4,5);  -- initialize it and put some values in c_v_sncode_update 
            cou NUMBER := 1;
            /* Have c_v_sncode polulated with some value */
            begin 
            /* print values in c_v_sncode_update*/
            for i in c_v_sncode_update.first .. c_v_sncode_update.last loop
            dbms_output.put_line(c_v_sncode_update(i)) ;
            end loop ;
            c_v_sncode :=  c_v_sncode_update ;

            /* print values in c_v_sncode*/
            for i in c_v_sncode.first .. c_v_sncode.last loop
            dbms_output.put_line(c_v_sncode(i)) ; -- Is this Correct way?
            end loop; 
            end ;