举个例子一个表有5个列,都是VARCHAR(100)左右,给的数据是
5-2,5-3,5-5,Null,null
5-1,5-4,null,5-3,5-2  
2行数据插入一张表,第一个数字5是列,第2个数字是代表有几个随机数,组成随机字符串,有可能是数字有可能是字母,随机生成出来,用逗号分割,请教下高手 ORACLE 如何实现,能够实现一定散分,谢谢。create teble temp(a1 varchar(100),a2 varchar(100),a3 varchar(100),a4 varchar(100),a5 varchar(100))想达到这样一个效果 
insert into temp values('c,a','d,b,5','8,9,0,s,a',null,null);
insert into temp values('z,1','m,u,0,8',null,'l,p,o','y,t,');

解决方案 »

  1.   

    --写了一个你参考一下
    create or replace function getRandomStr(v_col varchar2)
    return varchar2
    is
    type v_var is table of varchar2(1) index by binary_integer;
    v_v v_var;
    v_c varchar2(2000):=''; --存储要输出的随机字符串
    v_i int:=0;
    v_cnt int:=0;
    begin
    if v_col is null then
    return null;
    end if;
    --插入数字
    for i in 1..10 loop
    v_v(i):=to_char(i-1);
    end loop;--插入大写字母A-Z
    for i in 65..90 loop
    v_v(i-54):=chr(i);
    end loop;--插入小写字母a-z
    for i in 97..122 loop
    v_v(i-60):=chr(i);
    end loop;v_cnt:=to_number(substr(v_col,3));
    for i in 1..v_cnt loop
    v_c:=v_c||v_v(floor(dbms_random.value(1,63)));
    --索引表的下表从1到62floor(dbms_random.value(1,63))
    end loop;
    return v_c;
    exception
    when others then
    dbms_output.put_line('have an exception');
    end;
    /
      

  2.   

    SQL> select getRandomStr('5-2') from dual;GETRANDOMSTR('5-2')
    ----------------------------------------------
    M4
      

  3.   

    select dbms_random.string('a',8) "a_8_password" from dual;
    非常感谢sych888,有思路了。。