【入门】plsql中varray类型的应用

--可变数组的应用
declare
	type t_array is varray(10) of cbm_str.storname%type;
    v_array t_array := t_array();--用类型同名构造函数初始化
    
    type t_store is varray(10) of cbm_str.storecode%type;
    v_store t_store := t_store();
    
    cursor c_store is
    select a.storname from cbm_str a;
begin
	--检索一个字段,赋给v_array
    v_array.extend;
    select a.storname into v_array(1) 
    from cbm_str a where a.storecode = 5000;
    dbms_output.put_line('name is ' || v_array(1));

    --用bulk collect批量绑定
    v_array.extend(6); --向数组添加6个NULL元素
    /*select a.storname bulk collect into v_array
    from cbm_str a;*/--普通的用法
    execute immediate 'select storname from cbm_str'
    bulk collect into v_array; --结合本地动态sql一起使用
    for i in v_array.FIRST..v_array.LAST loop
    	dbms_output.put_line('name' || i || ' is ' || v_array(i));
    end loop;
    
    open c_store;
    fetch c_store bulk collect into v_array;--结合游标一起使用
    for i in v_array.FIRST..v_array.LAST loop
    	dbms_output.put_line('name' || i || ' is ' || v_array(i));
    end loop;
    close c_store;
    
    --用forall批量更新
    v_store.extend(7);
    select a.storecode bulk collect into v_store
    from cbm_str a;
    forall i in v_array.FIRST..v_array.LAST
    update cbm_str b
    set b.storname = v_array(i) || '(新)'
    where b.storecode = v_store(i);

	commit;
    
    --这里只不过是说明可变长数组的用法,实际当中最多的可能就是用索引表和记录类型做批量绑定。
    --用这个做绑定,唯一比较麻烦的就是访问前,都要extend下,而且不知道数据数的情况下,就不方便了。
end;
/

你可能感兴趣的:(集合,plsql,varray)