就是我要传入一个 数组参数,比如, 有表customer,字段address。我要清楚address里面的不规范信息,比方我传入N个不规范数据{'不规范数据1','不规范数据2','不规范数据2','不规范数据3'.......}。然后砸存储过程里面 loop for 循环用replace(address, '不规范数据1',‘规范数据1’)来处理掉。问下,这样的数据参数如何设定,我在plsql里面用exec proc_clean()的方式,数组参数如何写?请给个实例,谢谢!

解决方案 »

  1.   

    create or replace type tab_str as table of varchar2(30);
    create or replace procedure test(
            lt in tab_str
    ) is
    begin
        for v in (select column_value  from table(lt)) loop
            dbms_output.put_line(v.column_value);
        end loop;
    end test;SQL> set serverout on
    SQL> exec test(tab_str('1','2'))
      

  2.   

    create or replace type array_str as table of varchar2(1000);create or replace procedure demo_array(
            data in array_str
    ) is
    begin
        for v in (select column_value  from table(data)) loop
            dbms_output.put_line(v.column_value);
        end loop;
    end demo_array;
    --测试
    begin
     test_array(array_str('不规范数据1','不规范数据2','不规范数据2','不规范数据3)) ;
    end;
      

  3.   


    create or replace type array_str as table of varchar2(1000);create or replace procedure demo_array(
            data in array_str
    ) is
    begin
        for v in (select column_value  from table(data)) loop
            dbms_output.put_line(v.column_value);
        end loop;
    end demo_array;
    --测试
    begin
    test_array(array_str('不规范数据1','不规范数据2','不规范数据2','不规范数据3')) ;
    end;如果用pl/sql developer工具测试的话,可以在output看到输出结果。
      

  4.   


    如果我想往array_str里面添加一个数据,就想java数组的形式,a1[a1.length]='1';怎么操作呢?
      

  5.   

    array_str.extend;
    array_str(array_str.count):='1';
      

  6.   

    你是怎么做的?
    试试这个
    create or replace procedure test
    is
        v number;
        vt tab_str:=tab_str('0');
    begin
        vt.extend;
        vt(vt.count):='1';
        vt.extend;
        vt(vt.count):='2';
        select count(1)
         into v
         from table(vt);
         dbms_output.put_line(v);
    end test;