En Oracle Sql developer 11g, ¿cómo puedo generar un entero aleatorio y asignarlo a una variable? Esto es lo que he intentado hasta ahora:

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

Con este código que he obtenido un error:

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

Cuál es la forma correcta de resolver mi problema?

InformationsquelleAutor Justin | 2015-05-23

6 Comentarios

  1. 16

    Variables requieren PL/SQL; no es claro a partir de tu pregunta de si el código es correcto PL/SQL bloque. En PL/SQL variables se rellena a partir de consultas con el EN la sintaxis, en lugar de la asignación de sintaxis que se está utilizando.

    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;

    Aunque, usted no necesita utilizar la sintaxis de la consulta. Esto es válido, y la mejor práctica:

    declare
        n pls_integer;
    begin
        n := dbms_random.value(1,10);
    end; 
    • Bien, como tengo entendido, «n» es el nombre de la variable. Pero entonces, ¿qué es «txt» para? Cuando quiero usar la variable, lo puedo usar como «n» o como «txt»?
    • Bien, gracias por editar tu post. Como dicen en la internet: «Usted da la real MVP».
    • cortar y casos’pegue error 🙂
  2. 5

    Como alternativa, puede crear una función para generar números aleatorios.
    Esto puede ser utilizado en cualquier lugar en el código.

        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;
        /

    De SALIDA:

    Función creada.

    SQL> seleccionar al Azar from dual;

    AZAR

         6                                                                                                                  

    SQL> seleccionar al Azar from dual;

    AZAR

         9                                                                                                                  
    • No se trata simplemente de sentido contenedor a través de la funcionalidad integrada? De hecho, peor que inútil, ya que esconde una llamada adicional en DUAL y ofusca el preciso valor devuelto con que FLOOR(). También, ¿cuál es el punto de que el parámetro de entrada?
    • Gracias. Actualizado con ROUND().
  3. 4

    Si quieres obtener un número aleatorio de n dígitos que usted puede hacer esto

    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. 3

    Para un conjunto de enteros consecutivos, de forma aleatoria distribuida uniformemente (en el ejemplo de abajo entre 1 y 10), sugiero:

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

    De lo contrario voy a restringir el primer y el último número en el conjunto de la mitad de la probabilidad de ser elegido como el resto del conjunto.

  5. 0
    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.VALOR que Da el valor aleatorio dentro de la gama.

Dejar respuesta

Please enter your comment!
Please enter your name here