用下面的过程产生的 是乱码望达人解惑create or replace function getRanWords return varchar2 as
   out_name varchar2(100);
   i integer;
   begin
     for i in 1..10 loop
          --out_name:=out_name||chr(33344+mod(dbms_random.random(),28095));
          out_name:=out_name||chr(33343+trunc(dbms_random.value(1,28095)));
     end loop;
     return out_name;
  end;

解决方案 »

  1.   

    33343开始到33343 +28095 是网上找的。 研究了下, 正常范围应该是
    区位码 一级汉字从1601-1694,1701-1794,.....5401-5494,5501-5589,共94*40-5=3755 个汉字字符集默认的乱码是部分。综上改了下:
    create or replace function getRanWords return varchar2 as
       out_name varchar2(100);
       m integer;
       n integer;
       i integer;
       begin
         for i in 1..10 loop
             m:=mod(abs(dbms_random.random()),39)+16;
             n:=mod(abs(dbms_random.random()),94)+1;
             out_name:=out_name||chr((m+160)*16*16+n+160);
         end loop;
         return out_name;
      end;可用,揭帖
      

  2.   

    create or replace function getRanWords return varchar2 as
       out_name varchar2(100);
       i integer;
       begin
         for i in 1..10 loop
              --out_name:=out_name||chr(33344+mod(dbms_random.random(),28095));
              out_name:=out_name||chr(trunc(dbms_random.value(176,248))*256+trunc(dbms_random.value(161,255)));
         end loop;
         return out_name;
      end;