В спецификации пакета SYS.STANDARD увидел:
Код: Выделить всё
function ADD_MONTHS(LEFT DATE, RIGHT NUMBER) return DATE;
pragma BUILTIN('ADD_MONTHS',39, 12, 13); -- PEMS_DATE, DATE_ADD_MONTHS1
pragma FIPSFLAG('ADD_MONTHS', 1450);
function ADD_MONTHS(LEFT NUMBER, RIGHT DATE) return DATE;
pragma BUILTIN('ADD_MONTHS',39, 12, 14); -- PEMS_DATE, DATE_ADD_MONTHS2
pragma FIPSFLAG('ADD_MONTHS', 1450);
а по их типу Oracle уже разберется какую конкретную функцию вызывать.
Пробуем:
Код: Выделить всё
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
Session altered.
SQL> select sys.standard.add_months(DATE '2001-01-01', 1) Date_and_nmon
2 , sys.standard.add_months(1, DATE '2001-01-01') nmon_and_date
3 , version
4 from v$instance;
DATE_AND_NM NMON_AND_DA VERSION
----------- ----------- -----------------
01-ФЕВ-2001 01-ФЕВ-2001 19.0.0.0.0
Теперь уберем при вызове полную спецификацию sys.standard.:
Код: Выделить всё
SQL> select add_months(DATE '2001-01-01', 1) Date_and_nmon
2 , add_months(1, DATE '2001-01-01') nmon_and_date
3 , version
4 from v$instance;
Error starting at line : 20 in command -
select add_months(DATE '2001-01-01', 1) Date_and_nmon
, add_months(1, DATE '2001-01-01') nmon_and_date
, version
from v$instance
Error at Command Line : 21 Column : 19
Error report -
SQL Error: ORA-00932: несовместимые типы данных: ожидается DATE, получено NUMBER
00932. 00000 - "inconsistent datatypes: expected %s got %s"