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.

Manejo de excepciones en Oracle PL/SQL para parámetros de entrada (argumento incorrecto, es decir, valor no numérico para número)

Tengo un procedimiento almacenado con un parámetro de entrada de tipo número.

CREATE OR REPLACE PROCEDURE my_procedure (p_x number) 
AS

Incluí un código de manejo de excepciones como se muestra a continuación, pero no maneja lo siguiente:

execute my_procedure ('sads')

EXCEPTION
    WHEN VALUE_ERROR THEN
        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);

¿Hay alguna forma de cambiar la excepción para argumentos incorrectos?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de cambiar la excepción para argumentos incorrectos. Puede agregar otro controlador de excepciones específicamente para el caso en que el parámetro de entrada no sea de tipo número.

    Por ejemplo:

    CREATE OR REPLACE PROCEDURE my_procedure (p_x number) 
    AS
    BEGIN
        -- aquí va tu código
    EXCEPTION
        WHEN VALUE_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
    END;
    
    
    CREATE OR REPLACE PROCEDURE my_wrapper_procedure (p_x varchar2) 
    AS
    BEGIN
        IF NOT(REGEXP_LIKE(p_x, '^\d+$')) THEN
            RAISE_APPLICATION_ERROR(-20000, 'El parámetro de entrada debe ser un número');
        END IF;
    
        my_procedure(p_x);
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
    END;
    

    El procedimiento my_wrapper_procedure verifica si el parámetro de entrada es un número válido utilizando expresiones regulares. Si no es un número válido, genera un error de aplicación con un mensaje personalizado. Si es un número válido, llama a my_procedure.

    Puede personalizar el mensaje de error y el código de error según sea necesario.

Comments are closed.