Если вы хотите установить значение по умолчанию для параметра, сделайте так, как в этом примере:
SQL> create or replace procedure p_test
2 (fromdate_in in varchar2
3 default to_char(trunc(add_months(sysdate, -1), 'mm'), 'dd/mm/rrrr'))
4 is
5 begin
6 dbms_output.put_Line('fromdate_in = ' || fromdate_in);
7 end;
8 /
Procedure created.
Как вы и хотели, его значением по умолчанию является первоедень предыдущего месяца .Работает так:
SQL> set serveroutput on;
SQL> exec p_test;
fromdate_in = 01/08/2018
PL/SQL procedure successfully completed.
SQL> exec p_test('24/09/2018');
fromdate_in = 24/09/2018
PL/SQL procedure successfully completed.
SQL>
Обратите внимание, что вы действительно должны рассмотреть возможность перехода к параметру DATE
datatype вместо VARCHAR2
- вы все равно имеете дело с датами, поэтому - зачем беспокоиться о том, что недопустимые значения передаются впроцедура?Если это строка, что помешает кому-то передать, например, '99 / 66 / x-FZ 'в процедуру?Теперь вы должны позаботиться об этом, написать обработчик исключений ... все, потому что вы не установили тип данных параметров в DATE
.