Вы говорите, что получаете «ORA-01422: точная выборка возвращает больше, чем запрошенное количество строк», когда вы выполняете оба этих запроса? Это маловероятно, поскольку вы включаете предикат rownum <= 1
. Можете ли вы вырезать и вставить из сеанса SQL * Plus, который выполняет только этот запрос в блоке PL / SQL и генерирует ошибку?
Если вы не жалуетесь на ошибку, о которой говорите в заголовке, и проблема в том, что вы не получаете ожидаемых данных, вероятная проблема заключается в том, что у вас, очевидно, есть параметр bookDate
, который имеет тот же имя в качестве столбца в вашей таблице. Это не сработает. Когда вы говорите
(to_char(booking.bookdate,'dd-mon-yy'))=(to_char(bookDate,'dd-mon-yy'))
Вы, вероятно, хотите сравнить столбец bookDate
в таблице booking
с параметром bookDate
. Но поскольку имена столбцов имеют приоритет над локальными переменными, левая часть вашего выражения также смотрит на столбец bookDate
в таблице booking
. Итак, вы сравниваете столбец с самим собой. Было бы гораздо разумнее изменить имя параметра (скажем, p_bookDate
), а затем написать
booking.bookDate = p_bookDate
или, если вы хотите сделать сравнение, игнорируя временную составляющую дат
trunc( booking.bookDate ) = trunc( p_bookDate )