Страницы

27 сентября 2012 г.

pgScript. Работа с датами (представление значений в скрипте).

Доброго времени суток.

       pgScript во время выполнения подствляет вместо именованных переменных их значения, причем просто заметой имени на значения прямо в текста скрипта. Может быть для скриптовых языков (в общем случае) это не новость, но я столкнулся с этим впервые.
       На кануне мне довелось написать скрипток который выполняет запрос с фильтрацией по дате. Дата для фильтрации выбиралась в переменную скрипта, а позже использовалась в запросе.

Скрипт:
declare @SesRec,
 @i,
 @date_session;

begin
 set @SesRec = select to_char(session_begin, 'YYYY-MM-DD') from session order by session_begin;

 set @i = 0;
 while @SesRec[@i][0]
 begin
  set @date_session = @SesRec[@i][0];
  print @date_session;
  update "session" set
   id_session = @i
  where session_begin::date = '@date_session'::date;
   set @i = @i+1;
 end
end


Обратите внимание на запрос, а именно на способ подстановки переменной "@data_session":
update "session" set
 id_session = @i
where session_begin::date = '@date_session'::date;

pgScript интерпретировал такой запрос так:
[QUERY    ] 
update "session" set
 id_session = 0
where session_begin::date = '1900-01-01'::date
и выполнил его корректно!
Записи типа:
update "session" set
 id_session = @i
where session_begin::date = @date_session::date;
--**********************************************
update "session" set
 id_session = @i
where session_begin::date = ''||@date_session||''::date;
--**********************************************
update "session" set
 id_session = @i
where session_begin::date = quote_literal(@date_session)::date;

Работать не будут!

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

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