вторник, 4 октября 2011 г.

Получение 1 дня месяца в FireBird 2.1

Для одного из проектов понадобилось получать 1 день месяца из любой переданой в функцию даты. До начала использования Firebird 2.1 даная проблема решалась использованием udf из библиотеки rfunc. 
В версию Firebird 2.1 подключить бибилиотеку не получилось (правда не сильно то и старался), и было решено решить проблемму штатными средствами так как при использовании внешних бибилиотек обслуживающий персонал при переустановки системы постоянно забывал их возвращать на место. Так как в запросах данную функцию вызывать было не нужно а использовалась она только в хранимых процедурах, то напрашивалось сделать данную функцию в виде хранимой процедуры на PSQL. Решение конечно не самое красивое но оно выполняет поставленые задачи. Собственно код процедуры :

SET TERM ^ ;

create or alter procedure LFIRSTDAY (
    PDATE date)
returns (
    FIRSTDATE date)
as
declare variable MT smallint;
declare variable YR integer;
declare variable S varchar(10);
begin
  /* Procedure Text */
  mt=extract(month from :pdate);
  yr=extract(year from :pdate);
  s='01.'||cast(mt as varchar(2))||'.'||cast(yr as varchar(4));
  firstdate=cast(s as date);
  suspend;
end^

SET TERM ; ^

Комментариев нет:

Отправить комментарий