Доброго времени суток.
pgScript во время выполнения подствляет вместо именованных переменных их значения, причем просто заметой имени на значения прямо в текста скрипта. Может быть для скриптовых языков (в общем случае) это не новость, но я столкнулся с этим впервые.
На кануне мне довелось написать скрипток который выполняет запрос с фильтрацией по дате. Дата для фильтрации выбиралась в переменную скрипта, а позже использовалась в запросе.
Скрипт:
Обратите внимание на запрос, а именно на способ подстановки переменной "@data_session":
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;
Работать не будут!
Комментариев нет:
Отправить комментарий