现在5个varcher2变量
msg1 := 'abc';
msg2 := 'def';
msg3 := 'ghi';
msg4 := 'jkl';
msg5 := 'mno';
可不可以用循环 重新 赋值给 一个新的变量使之连接成一个新的字符串? 高手请指点一下.谢谢.

解决方案 »

  1.   

    是这个意思么
    MSG:=msg1||msg2||msg3||msg4||msg5;
      

  2.   

    使用oracle索引表吧,类似于其它语言中的数组
    SQL> SET SERVEROUTPUT ON;
    SQL> DECLARE
      2    TYPE strType IS TABLE OF VARCHAR2(200) INDEX BY PLS_INTEGER;
      3    str strType;
      4    s   VARCHAR2(2000) := '';
      5  BEGIN
      6    str(1) := 'abc';
      7    str(2) := 'def';
      8    str(3) := 'ghi';
      9    str(4) := 'jkl';
     10    str(5) := 'mno';
     11    FOR i IN 1 .. 5 LOOP
     12      s := s || str(i);
     13    END LOOP;
     14    dbms_output.put_line(s);
     15  END;
     16  /
    abcdefghijklmnoPL/SQL 过程已成功完成。SQL> 
      

  3.   

    TYPE strType IS TABLE OF VARCHAR2(200) INDEX BY PLS_INTEGER;
    上面是声明一个自定义的索引表类型,然后就可以象其它标准类型一要被用来声明变量了。
    另外oracle中还有嵌套表、变长数组等类似于数组的自定义类型。推荐一本书《精通Oracle 10g PL/SQL编程》上讲得很详细,网上有电子书下载。
      

  4.   

    谢谢tangren支持.
    我现在的这几个 msg1 msg2 msg3 msg4 msg5 .....是存储过程入参,已经定义好了的50个参数.照上面好像还是实现不了. 因为平台的特殊原因,调用存储过程的入参长度不长于70个字符. 为了能接收一个比较长的字符串,只能定义多个参数(50个入参),用来接收数据.然后再拼起来,再解析.