Los valores predeterminados solo se utilizan si no se especifican los argumentos. En tu caso lo hiciste especifique los argumentos:se proporcionaron ambos, con un valor NULL. (Sí, en este caso NULL se considera un valor real :-). Prueba:
EXEC TEST()
Comparte y disfruta.
Anexo :Los valores predeterminados para los parámetros del procedimiento ciertamente están enterrados en una tabla del sistema en algún lugar (consulte el SYS.ALL_ARGUMENTS
vista), pero obtener el valor predeterminado de la vista implica extraer texto de un campo LARGO, y probablemente resultará ser más doloroso de lo que vale. Lo fácil forma es agregar algo de código al procedimiento:
CREATE OR REPLACE PROCEDURE TEST(X IN VARCHAR2 DEFAULT 'P',
Y IN NUMBER DEFAULT 1)
AS
varX VARCHAR2(32767) := NVL(X, 'P');
varY NUMBER := NVL(Y, 1);
BEGIN
DBMS_OUTPUT.PUT_LINE('X=' || varX || ' -- ' || 'Y=' || varY);
END TEST;