web-dev-qa-db-ja.com

PLSQLはランダムな整数を生成します

Oracle SQL開発者11gでは、ランダムな整数を生成して変数に割り当てる方法を教えてください。これは私がこれまでに試したことです:

S_TB := SELECT dbms_random.value(1,10) num FROM dual;

このコードでエラーが発生しました:

S_TB := SELECT dbms_random.value(1,10) num FROM dual
Error report -
Unknown Command

私の問題を解決する適切な方法は何ですか?

6
Justin

変数にはPL/SQLが必要です。コードが適切なPL/SQLブロックであるかどうかは、質問から明らかではありません。 PL/SQLでは、変数は、使用している代入構文ではなくINTO構文を使用してクエリから入力されます。

declare
    txt varchar2(128);
    n pls_integer;
begin
    --  this is how to assign a literal
    txt := 'your message here';

    --  how to assign the output from a query
    SELECT dbms_random.value(1,10) num 
    into n
    FROM dual;

end;

ただし、クエリ構文を使用する必要はありません。これは有効であり、より良い実践です:

declare
    n pls_integer;
begin
    n := dbms_random.value(1,10);
end; 
17
APC

または、乱数を生成する関数を作成できます。これはコードのどこでも使用できます。

    create or replace function RANDOM
    return number 
    is 
    a number ; 
    begin
    select round(dbms_random.value(1,10)) rnum
    into a 
    from dual;
    return a  ;
    end;
    /

出力:

関数が作成されました。

SQL>ランダムからデュアルを選択します。

ランダム

     6                                                                                                                  

SQL>ランダムからデュアルを選択します。

ランダム

     9                                                                                                                  
5
mahi_0707

あなたがn桁の乱数を取得したい場合は、これを行うことができます

CREATE OR REPLACE FUNCTION NUM_RANDOM(N IN NUMBER)
RETURN NUMBER 
AS 
BEGIN
    RETURN TRUNC (DBMS_RANDOM.VALUE(POWER(10, N - 1), POWER(10, N) - 1));
END NUM_RANDOM;
4
Monicalh

ランダムに均一に分散された一連の整数(以下の例では1から10の間)の場合、次のことをお勧めします。

select round(dbms_random.value(0.5,10.49999999999),0) from dual

それ以外の場合は、セットの最初と最後の数値を、セットの残りとして選択される確率の半分に意図せずに制限します。

3
TastySlowCooker

整数:

select dbms_random.random from dual

正の整数:

select abs(dbms_random.random) from dual
1
ThePolyhedric
DECLARE
l_check Integer:=1;
BEGIN
    WHILE l_check < 5 LOOP
        l_check := DBMS_RANDOM.VALUE(1,10);
        DBMS_OUTPUT.PUT_LINE(l_check);
    END LOOP;
END;

-DBMS_RANDOM.VALUE範囲内のランダムな値を提供します。

0
Krishna