题目要求:打印100-200之间20个不重复的随机数。
我已经用 select ceil(dbms_random.value(100,200)) from dual;
这句话求到了随机数,但是不知道如何去判断,最好能够用一张表保存随机数,打印的时候先查询我的代码如下,先不考虑重复不重复 可是打印不出。
declare
begin_no number:=0;
end_no number:=20;
rand_no number;
sql_stmt varchar(200);begin
while begin_no=end_no
loop
sql_stmt:='select ceil(dbms_random.value(100,200)) from dual';
execute immediate sql_stmt into rand_no;
 dbms_output.put_line(rand_no);
 begin_no:=begin_no+1;
end loop;
end;难道动态plsql用的不对?望各位不吝赐教,谢谢!

解决方案 »

  1.   

    declare
    begin_no number:=0;
    rand_no number;
    sql_stmt varchar(200);begin
    while begin_no<=20
    loop
          sql_stmt:='select ceil(dbms_random.value(100,200)) from dual';
          execute immediate sql_stmt into rand_no;
          dbms_output.put_line('数字:'||rand_no);
          begin_no:=begin_no+1;
    end loop;
    end;这样就可以了,我循环写错。但是没有判断重复.
      

  2.   

    自己解决了;declare
    begin_no number:=0;
    rand_no number;
    sql_stmt varchar(200);
    result_no number;
    begin
    while begin_no<=20
    loop
          sql_stmt:='select ceil(dbms_random.value(100,200)) from dual';
          execute immediate sql_stmt into rand_no;
          --查询
          sql_stmt:='select count(no) from rand_table where no=:id';
          execute immediate sql_stmt into result_no using rand_no;
          
          if result_no > 0 then
             null;
          else
          insert into rand_table values(result_no);
          dbms_output.put_line('数字:'||rand_no);
          begin_no:=begin_no+1;
          end if;
    end loop;
    rollback;
    end;