pl-sql, как выполнить простую функцию max (Date) - PullRequest
1 голос
/ 04 мая 2011

привет я новичок в oracle db, как я могу просто попросить максимальную дату?

FUNCTION get_max_date_rec(
  i_value_date                  IN  vat.value_date%TYPE := app_utilities_q.server_sys_date )
RETURN vat.rec_id%TYPE
IS 
 v_date vat.value_date%TYPE; 
BEGIN

  SELECT  MAX(v.value_date)--compiler err
  INTO    v_date
  FROM    vat v 
  WHERE v.value_date < i_value_date 

  RETURN get_rec_by_date(v_date).rec_id;--compiler err

 END get_max_date_rec;

EDIT это ошибка, созданная компилятором Ошибка (76,7): PL / SQL: оператор SQL игнорируется Ошибка (81,7): PL / SQL: ORA-00933: команда SQL неправильно завершена

Я хочу вернуть rec_id, как написано выше ...

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

проблема была не добавляется

;

в конце выбора

  SELECT  MAX(v.value_date)--compiler err
  INTO    v_date
  FROM    vat v 
  WHERE v.value_date < i_value_date ;
2 голосов
/ 04 мая 2011
FUNCTION get_max_date_rec(
  i_value_date  IN  vat.value_date%TYPE 
    default app_utilities_q.server_sys_date  -- assuming this is a default
  )
RETURN vat.rec_id%TYPE
IS 
 v_date vat.value_date%TYPE; 
BEGIN

  SELECT  MAX(v.value_date)--compiler err
  INTO    v_date
  FROM    vat v 
  WHERE v.value_date < i_value_date 

  RETURN v_date;

 END get_max_date_rec;

Один риск состоит в том, что если в дате vat не существует записей с датой, превышающей i_value_date, код завершится ошибкой, выдав исключение NO_DATA_FOUND.Вам следует подумать о том, как вы можете справиться с этим условием - или не справиться с ним, если это правильно.

...