3

我需要从 1 到 49 生成 6 个不重复的数字。我有类似的东西:

create table zadanie1(
NAZWISKO varchar2(30),
PUNKTY number,
ID number,
constraint stud1_nazw primary key(NAZWISKO)
);



create or replace procedure "LOTTO" IS
pkt number;
begin
   loop
       BEGIN
       pkt := round(dbms_random.value(1,14),0);
       INSERT INTO ZADANIE1(PUNKTY) VALUES (pkt);
       exit;
       Exception When DUP_VAL_ON_INDEX Then 0;
       END;
end loop;
END;

但这似乎不起作用。有人可以帮助我吗?

4

3 回答 3

5
SQL> select num 
  2  from (select rownum num 
  3        from dual 
  4        connect by level <= 49 
  5        order by dbms_random.value) 
  6  where rownum <= 6;

       NUM
----------
        10
         6
         9
        12
        22
        14
于 2012-11-07T17:50:36.963 回答
1

只需将 49 个数字放在一个表中并使用

SELECT SOME_NUMBER FROM
(
  SELECT SOME_NUMBER
  FROM TABLE_OF_NUMBERS
  ORDER BY DBMS_RANDOM.VALUE()
)

WHERE ROWNUM < 7
于 2012-11-07T17:39:48.277 回答
0

好的,谢谢回答。我需要为此表添加列。并为每一行(用户)添加 6 个数字,就像彩票一样。

create table zadanie1( user varchar2(30), PUNKTY number, ID number, constraint stud1_nazw primary key(NAZWISKO) );

于 2012-11-07T18:22:29.757 回答