Функция Oracle для наименьшей возможной даты - PullRequest
0 голосов
/ 15 ноября 2018

Рассмотрим следующие две функции, которые возвращают количество фильмов, взятых клиентом в аренду.Второй перегружает первый и имеет еще два параметра для определения диапазона, в котором следует снимать фильмы.

FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE)
RETURN INTEGER;    

FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE, begin_date_in IN DATE, end_date_in IN DATE)
RETURN INTEGER;

Чтобы уменьшить дублирование кода, я хочу вызвать вторую функцию из первой.Для end_date_in я могу передать SYSDATE , но есть ли функция Oracle для передачи наименьшей возможной даты для begin_date_in (<> вследующий код) без запроса к таблице CUSTOMER ?

FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE)
RETURN INTEGER IS
BEGIN
  RETURN GetFilmCount(customer_id_in, <> ,SYSDATE);
END;

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Используйте NULL для "неопределенных" значений вместо некоторого магического числа:

FUNCTION GetFilmCount(
  customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE
)
RETURN INTEGER IS
BEGIN
  RETURN GetFilmCount(customer_id_in, NULL ,SYSDATE);
END;

и

FUNCTION GetFilmCount(
  customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE,
  begin_date_in  IN DATE,
  end_date_in    IN DATE
)
RETURN INTEGER IS
  p_count NUMBER;
BEGIN
  SELECT COUNT(*)
  INTO   p_count
  FROM   your_table
  WHERE  customer_id = customer_id_in
  AND    ( begin_date_in IS NULL OR begin_date_in    <= your_date_column )
  AND    ( end_date_in   IS NULL OR your_date_column <= end_date_in );

  RETURN p_count;
END;
0 голосов
/ 15 ноября 2018

Минимальное значение переменной DATE в Oracle - 1 января 4712 г. до н.

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