Хранимая процедура Oracle, SELECT - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать процедуру, которая отображает события между двумя датами, и мой код не компилируется. В cmd приглашение формула SELECT работает, но здесь не хочет. Я новичок в базе данных Oracle, вот код:

create or replace PROCEDURE SHOW_EVENTS 
(
  SINCE IN DATE 
, TTO IN DATE 
) AS 
BEGIN
   SELECT * FROM events
   WHERE EVENT_DATE BETWEEN TO_DATE(SINCE,'dd/mm/yyyy') AND TO_DATE(TTO,'dd/mm/yyyy')

END SHOW_EVENTS;

1 Ответ

0 голосов
/ 02 мая 2018

У вас есть несколько вопросов. Во-первых, запрос должен быть:

SELECT e.*
FROM events e
WHERE e.EVENT_DATE BETWEEN SINCE AND TTO;

Нет нужды конвертировать дату в дату. Единственная возможная причина - урезание даты до ближайшего дня (потому что даты Oracle имеют компоненты времени). Это лучше сделать как:

SELECT e.*
FROM events e
WHERE e.EVENT_DATE BETWEEN trunc(SINCE) AND trunc(TTO);

Что еще более важно, вы не можете (легко) делать то, что вы хотите. Не с хранимой процедурой, потому что они не возвращают наборы результатов. Не с целью, потому что они не параметризованы. Не легко с функцией - написание функций, которые возвращают «таблицу», довольно сложно в Oracle. Это не для непосвященных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...