Подтвердить что ты не робот

Значения по умолчанию для хранимой процедуры в Oracle

У меня есть stored procedure следующим образом.

 CREATE OR REPLACE PROCEDURE TEST(
       X IN VARCHAR2 DEFAULT 'P',
       Y IN NUMBER DEFAULT 1) AS
 BEGIN
 DBMS_OUTPUT.PUT_LINE('X'|| X||'--'||'Y'||Y);
 END;

Когда я выполняю описанную выше процедуру

 EXEC TEST(NULL,NULL);

Он напечатает X--Y. Входные параметры не имеют значений по умолчанию, указанных в сигнатуре процедуры, когда входные параметры - null. Какая польза от значений default? Что если мы передадим значение null в качестве входных данных и хотим заменить значение null значением default?

4b9b3361

Ответ 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;