es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar un bucle WHILE hasta que todos los valores en una columna sean cero en PL/SQL?

Por ejemplo, supongamos que tenemos una tabla de niños y una tabla de dulces.

create table kids( kid_name varchar2(20), money number);
create table candy( candy_name varchar(20), price number);

Y quiero crear un procedimiento (ventas) que haga una venta para un nombre de niño aleatorio que compre un dulce aleatorio. En cada venta, el dinero de los niños disminuye hasta que el dinero de todos los niños sea igual a 0.

¿Cómo puedo expresarlo con un bucle while?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un procedimiento que realice una venta para un kid_name aleatorio que compra un candy_name aleatorio mientras reduce el dinero de los niños hasta que no tengan dinero, puede usar un bucle while en PL / SQL. Esto es lo que puede hacer:

    CREAR O REEMPLAZAR PROCEDURE ventas ES
      kid_count NUMBER;           -- para almacenar el número de niños en la tabla
      candy_count NUMBER;         -- para almacenar el número de caramelos en la tabla
      selected_kid_name kids.kid_name%TYPE;     -- para almacenar el nombre del niño seleccionado al azar
      selected_candy_name candy.candy_name%TYPE;   -- para almacenar el nombre del caramelo seleccionado al azar
      candy_price candy.price%TYPE;           -- para almacenar el precio del caramelo seleccionado
    BEGIN
      -- obtener el número de niños en la tabla
      SELECT COUNT (*) INTO kid_count FROM kids;
    
      -- obtener el número de caramelos en la tabla
      SELECT COUNT (*) INTO candy_count FROM candy;
    
      -- bucle a través de todos los niños hasta que se les acabe todo el dinero
      FOR i IN 1..kid_count LOOP
        -- seleccionar el nombre de un niño al azar
        SELECT kid_name INTO selected_kid_name FROM (
          SELECT kid_name FROM kids ORDER BY dbms_random.value
        ) WHERE rownum = 1;
    
        -- seleccionar el nombre de un caramelo al azar
        SELECT candy_name, price INTO selected_candy_name, candy_price FROM (
          SELECT candy_name, price FROM candy ORDER BY dbms_random.value
        ) WHERE rownum = 1;
    
        -- si el niño tiene suficiente dinero para comprar el caramelo, entonces realizamos la venta
        SI kids.money >= candy_price THEN
          dbms_output.put_line (selected_kid_name || 'compró' || selected_candy_name);
          kids.money: = kids.money - candy_price;
        FIN SI;
    
        -- salir del bucle si todos los niños están sin dinero
        SALIR CUANDO i = kid_count Y kids.money = 0;
      FIN LOOP;
    
      dbms_output.put_line ('¡Todas las ventas se han realizado!');
    FIN;
    

    En este procedimiento, primero obtenemos el número de niños y caramelos en sus respectivas tablas. Luego, usamos un bucle for para recorrer a todos los niños hasta que se les acabe todo el dinero. Dentro del bucle, seleccionamos el nombre de un niño y el nombre y precio de un caramelo al azar. Si el niño tiene suficiente dinero para comprar el caramelo, realizamos la venta restando el precio del caramelo del dinero del niño. También mostramos un mensaje indicando que se realizó la venta.

    Luego, verificamos si todos los niños se quedaron sin dinero y salimos del bucle si esto es cierto. Finalmente, mostramos un mensaje indicando que se han realizado todas las ventas.

Comments are closed.