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
私の問題を解決する適切な方法は何ですか?
変数には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;
または、乱数を生成する関数を作成できます。これはコードのどこでも使用できます。
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
あなたが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;
ランダムに均一に分散された一連の整数(以下の例では1から10の間)の場合、次のことをお勧めします。
select round(dbms_random.value(0.5,10.49999999999),0) from dual
それ以外の場合は、セットの最初と最後の数値を、セットの残りとして選択される確率の半分に意図せずに制限します。
整数:
select dbms_random.random from dual
正の整数:
select abs(dbms_random.random) from dual
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範囲内のランダムな値を提供します。