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 comprobar la longitud de una tabla y hacer una condición “if” con ella para luego eliminar una fila?

Tengo una tabla que disminuyo una fila cada vez que entra en un bucle. ¿Cómo puedo verificar antes del bucle si la longitud de la tabla es cero y eliminar la fila que obtuve después?

declarar
l_temp número;
comenzar
insertar en l_temp (seleccionar id_juguete de juguetes);
 si l_temp > 0 entonces 
     para rw en (seleccionar id_juguete de (seleccionar id_juguete 
                                                 de juguetes
                                             ordenar por dbms_random.value)
                                             donde fila = 1)
       bucle
        dbms_output.put_line(id_juguete);
       eliminar de juguetes donde id_juguete = rw;
     fin loop;
 sino
 dbms_output.put_line('no hay más juguetes');
fin si;
fin;
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para comprobar si la longitud de la tabla es cero antes del bucle y eliminar la fila después, se puede usar el siguiente código:

    DECLARE
      l_temp NUMBER;
    BEGIN
      SELECT COUNT(*) INTO l_temp FROM toys;
    
      IF l_temp > 0 THEN 
        FOR rw IN (SELECT toy_id FROM (SELECT toy_id FROM toys ORDER BY dbms_random.value) WHERE rownum = 1) LOOP
          DBMS_OUTPUT.PUT_LINE(rw.toy_id);
          DELETE FROM toys WHERE toy_id = rw.toy_id;
        END LOOP;
      ELSE
        DBMS_OUTPUT.PUT_LINE('no hay más juguetes');
      END IF;
    END;
    

    El código primero selecciona el número de filas en la tabla de toys usando la función COUNT y lo guarda en la variable l_temp. Luego, comprueba si l_temp es mayor que cero. Si lo es, se ejecuta el bucle, seleccionando un toy_id aleatorio y eliminándolo de la tabla de toys. Si l_temp es cero, el programa imprime “no hay más juguetes”.

    Tenga en cuenta que en el código original, l_tem nunca se inicializó; asumo que es un error tipográfico y lo cambié a l_temp. Además, en la declaración DELETE, toy_id(rw) debería cambiarse a toy_id = rw.toy_id, ya que rw es una variable de cursor que representa la fila actual que se está procesando.

Comments are closed.