Далее подробно я уже не буду останавливаться на разборе конкретных примеров - все и так было выше, только буду освещать основные новые и непонятные места.
Все данные находятся в базе в начале этого поста.
вот текст процедуры ADD_QUOTATION (добавить котировку)
в процедуре добавлены параметры (подробно все указано выше)
и переменная CNT типа SMALLINT для подсчета количества записей в таблице.
begin CNT=0; /* переменная для определения количества записей по заданному условию */ SELECT COUNT(1) FROM quotations WHERE symbol=:par_symbol and timeframe=:par_timeframe and date_time=:par_data INTO :CNT; IF (CNT>0) THEN BEGIN /* если количество записей равно 0, значит добавляем запись */ update quotations set c_volume = :par_volume, c_high = :par_high, c_low = :par_low, c_open = :par_open, c_close = :par_close where symbol = :par_symbol and timeframe = :par_timeframe and date_time=:par_data; END ELSE BEGIN /* если количество записей больше 0, значит редактируем запись */ INSERT INTO quotations(symbol, timeframe, date_time, c_high, c_low, c_open, c_close, c_volume) VALUES (:par_symbol,:par_timeframe,:par_data,:par_high,:par_low,:par_open,:par_close, :par_volume); END SUSPEND; end
пример вызова процедуры:
execute procedure add_quotation 'EURUSD', 'H4', '2010.02.16 16:00', 1.37748, 1.36442, 1.36690, 1.37541, 10185
можете попробовать вызвать процедуру несколько раз с одними и теми же параметрами. Исключительных ситуаций при этом не возникает - все "отруливает" процедура. В этом можно убедиться (кто знает английский) в окне снизу первый раз идет сообщение inserted все остальные - updated.
Таким образом, мыбудем использовать эту процедуру для создания записей в таблице котировок.