В настоящее время (по состоянию на 18c) предложение default
или :=
в спецификации параметров PLSQL ведет себя как предложение pre-12c default
в определении столбца таблицы.То есть значение по умолчанию применяется только тогда, когда соответствующий столбец вообще не указан.
Если вы определите столбец таблицы как
somedate date default sysdate
, тогда ему будет назначено только значение по умолчаниюесли оператор insert
вообще не упоминает столбец somedate
.Если insert
устанавливает somedate
в null
, тогда он будет нулевым, независимо от значения по умолчанию.То же самое относится и к параметрам PL / SQL.Явное значение null
, переданное в параметре, переопределяет любое значение по умолчанию, установленное для параметра.
Вам необходимо определить локальную константу вдоль строк
k_x constant date := coalesce(p_x,sysdate);
, а затем получить остальныепроцедуры ссылаются на это вместо параметра.
В 12c у нас есть default on null
для столбцов таблицы, но, на мой взгляд, PL / SQL отстает, так как не имеет эквивалентного синтаксиса для значений параметров по умолчанию.Если вы передаете null
параметру PL / SQL, он учитывает null
, а не значение по умолчанию, которое вы указали, поскольку у него нет синтаксической опции on null
.
Если вы хотите, чтобы Oracle расширялПараметры PL / SQL по умолчанию расположены в тех же строках, что и столбцы таблицы, а затем рассмотрите возможность голосования за мое предложение здесь:
https://community.oracle.com/ideas/18189