Доброго времени суток.
Опыт изучения технической литературы показывает, что трудно уяснить теорию не закрепленную примерами. Да, я стараюсь везде выкладывать примеры использование тех или иных инструкций, но разница между "школьными" примерами и боевыми рабочими скриптами все таки колоссальна. Я буду стараться выгружать сюда как можно больше разнообразной практики, чтобы остальным было легче понять и разобраться в нюансах. И, может быть, сделать мне пару замечаний, ибо я все же еще новичок.
Итак, вот собственно скрипт:
Думаю комментариев в данном скрипте достаточно и дополнительные объяснения будут лишними.
При написании данного скрипта я изредка поглядывал с статьи:
pgScript. Написание простых скриптов. Первый опыт.
pgScript. Использование типа RECORD
Опыт изучения технической литературы показывает, что трудно уяснить теорию не закрепленную примерами. Да, я стараюсь везде выкладывать примеры использование тех или иных инструкций, но разница между "школьными" примерами и боевыми рабочими скриптами все таки колоссальна. Я буду стараться выгружать сюда как можно больше разнообразной практики, чтобы остальным было легче понять и разобраться в нюансах. И, может быть, сделать мне пару замечаний, ибо я все же еще новичок.
Итак, вот собственно скрипт:
declare
@SesNULLRec,
@i,
@max_prev_session;
begin
/*Выгружаем все пропущенные сессиии в таблице security_price*/
set @SesNULLRec = select distinct ses.id_session
from session ses
left join security_price sp on ses.id_session = sp.id_session
where sp.id_session is null;
--счетчик цикла (индекс значений в SesNULLRec)
set @i = 0;
while @SesNULLRec[@i][0] --пока значение есть...
begin
--пристваиваем отдельной пеерменной значение RECORD-переменной, ибо RECORD неправильно интерпретируется
--select запросом
set @max_prev_session = @SesNULLRec[@i][0]; -- строка i, столбец 0
--выводим значение (для информативности)
print @max_prev_session;
/*Вставить в security_price записи из security_price с наибольшим идентификатором сессии который
меньше чем указанный (указанный в данном случае - это тот который отсуствует в таблице security_price)
Короче: Если в security_price нет записей за нужную сессию, копируем записи из ближайшей последней
сессии подставляем идентификатор НУЖНОЙ, тем самым восполняя пробелы...*/
insert into security_price (id_security, id_session, lot_size, cur_price)
select
id_security,
@max_prev_session::bigint, -- нужной сессии
lot_size,
cur_price
from
security_price
where id_session in ( -- максимальный идентификатор предшествующей сессии
select
max(id_session)
from security_price
where id_session < @max_prev_session::bigint
);
--наращиваем счетчик цикла (индекс значений в SesNULLRec)
set @i = @i+1;
end
end
Думаю комментариев в данном скрипте достаточно и дополнительные объяснения будут лишними.
При написании данного скрипта я изредка поглядывал с статьи:
pgScript. Написание простых скриптов. Первый опыт.
pgScript. Использование типа RECORD
Комментариев нет:
Отправить комментарий