prosource

PLSQL 랜덤 정수 생성

probook 2023. 7. 27. 22:06
반응형

PLSQL 랜덤 정수 생성

Oracle Sql developer 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; 

임의로 균일하게 분포된 연속 정수 집합(아래 예제에서는 1과 10 사이)에 대해 다음을 제안합니다.

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

그렇지 않으면 의도치 않게 세트의 첫 번째와 마지막 숫자를 나머지 세트로 선택될 확률의 절반으로 제한합니다.

q3kep 및 GolezTrol에서 지적한 바와 같이 dbms_random.value(x, y)는 x보다 크거나 같고 y보다 작은 에 대해 균일한 랜덤 분포를 제공합니다.따라서 다음 중 하나가 적합합니다.

select trunc(dbms_random.value(1,11)) from dual

또는

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

설명서에 따라

또는 난수를 생성하는 함수를 생성할 수 있습니다.이것은 코드의 모든 곳에서 사용할 수 있습니다.

    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;

정수:

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 범위 내의 임의 값을 제공합니다.

언급URL : https://stackoverflow.com/questions/30417788/plsql-generate-random-integer

반응형