Ответ 1
Значения по умолчанию используются, только если аргументы не указаны. В вашем случае вы указали аргументы - оба были поставлены со значением NULL. (Да, в этом случае NULL считается реальной стоимостью:-). Попробуйте:
EXEC TEST()
Поделитесь и наслаждайтесь.
Добавление: значения по умолчанию для параметров процедуры, конечно, где-то зарыты в системной таблице (см. представление SYS.ALL_ARGUMENTS
), но получение значения по умолчанию из представления связано с извлечением текста из LONG поле, и, вероятно, окажется более болезненным, чем это стоит. Простым способом является добавление кода в процедуру:
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;