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.

[PL/SQL] cómo hacer un bucle que ejecute múltiples procedimientos

Supongamos que tengo una lista de procedimientos p1, p2, p3… pn, cada procedimiento tiene solo un parámetro de salida numérico, básicamente cada procedimiento es un número constante. ¿Cómo puedo crear un bucle que ejecute todos estos procedimientos y muestre los resultados en la pantalla? Intenté con EXECUTE IMMEDIATE algo como:

DECLARE
i number;
n number:=5;
print number;
begin
for i in 1 .. n loop
EXECUTE IMMEDIATE ‘BEGIN p’||i||'(‘||print||’) END;’;
dbms_output.put_line(print);
end loop;
end;

También intenté con la forma [EXECUTE IMMEDIATE sql_stmt INTO print USING i], pero aún no he logrado nada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, puedo ofrecer las siguientes sugerencias para crear un bucle que ejecute todos los procedimientos y muestre sus resultados en la pantalla:

    1. Crear un cursor que seleccione los nombres de todos los procedimientos de la base de datos.
    2. Iterar a través del cursor utilizando un bucle y ejecutar cada procedimiento usando SQL dinámico (EXECUTE IMMEDIATE).
    3. Capturar la salida de cada procedimiento en una variable y mostrarla en la pantalla usando DBMS_OUTPUT.PUT_LINE.

    Aquí hay un fragmento de código de muestra que demuestra este enfoque:

    DECLARE
       PROC_NAME VARCHAR2(100);
       RESULT NUMBER;
    BEGIN
       -- Crear un cursor para seleccionar los nombres de todos los procedimientos
       FOR PROC IN (SELECT OBJECT_NAME
                    FROM USER_PROCEDURES
                    WHERE OBJECT_TYPE = 'PROCEDURE'
                    ORDER BY OBJECT_NAME)
       LOOP
          -- Ejecutar cada procedimiento utilizando SQL dinámico
          EXECUTE IMMEDIATE 'BEGIN ' || PROC.OBJECT_NAME || '(:1); END;' USING OUT RESULT;
    
          -- Mostrar el resultado en la pantalla
          DBMS_OUTPUT.PUT_LINE('El procedimiento ' || PROC.OBJECT_NAME || ' devuelve ' || RESULT);
       END LOOP;
    END;
    

    En este código, seleccionamos todos los nombres de procedimientos de la tabla USER_PROCEDURES e iteramos sobre ellos usando un FOR LOOP. Dentro del bucle, ejecutamos cada procedimiento usando EXECUTE IMMEDIATE y capturamos la salida en la variable RESULT. Finalmente, mostramos el nombre del procedimiento y su resultado usando DBMS_OUTPUT.PUT_LINE.

    Tenga en cuenta que este código asume que cada procedimiento tiene solo un parámetro de salida numérico. Si un procedimiento tiene varios parámetros de salida o un tipo de dato diferente, puede que necesite modificar la declaración de SQL dinámico en consecuencia.

Comments are closed.