Oracle странен во многих отношениях.Он играет быстро и свободно со многими вещами: значение NULL
, неявные преобразования типов данных и целый ряд других вещей.
Среди них, как вы заметили, их несовместимый синтаксис для вызова функцийбез параметров.(Для объявления таких функций тоже - см. Ниже.)
Собственные функции, такие как sysdate
и current_timestamp
, которые не принимают аргументы, должно быть написано без скобок.Вы запрашиваете документацию ... самый прямой (и все же не вполне удовлетворительный) указатель - на документацию каждой функции, где синтаксис очень четко показан без скобок.Что вы ищете - отдельное упоминание в документации, где это прямо указано?
Сравните это с аналитическими функциями, такими как, например, rownumber()
, которые также не принимают аргументов.Вы должны написать их с пустыми скобками!
Хуже: для функций вы пишете себя в PL / SQL и вызываете из операторов SQL:если функция не принимает аргументов, то она должна быть определена без скобок.Однако, когда вы вызываете его (например, в операторе select
), вы можете назвать его с или без (пусто)) круглые скобки - оба синтаксиса действительны.Не так, увы, с нативными функциями, такими как sysdate
.Зачем?Опять же, хороший вопрос, чтобы задать Oracle.
Это также не заканчивается.connect_by_root
- это «иерархическая функция» (функция, которая может использоваться в иерархических запросах).Он принимает аргумент - который может быть указан в скобках (как в любой обычной функции) или без скобок!Иди цифру.
Если спросить ПОЧЕМУ ??? - ты не одинок.Я тоже понятия не имею.