Интерфейс к базе итогов торгов.

Оглавление:

Общие положения: 3

Общие функции: 3

Список рынков. 3

Список секторов. 3

Зарегестрировать пользователя в системе для данного сектора. 3

Поля: 3

Описание полей. 3

Список наборов полей. 3

Принадлежность поля к набору. 4

Описание полей данных по сделкам.. 4

Описание полей в файле DBF. 4

Данные для шапки таблицы.. 4

Бумаги: 5

Список бумаг. 5

Поиск бумаги. 5

Список инструментов. 6

Список режимов торгов: 6

Список заданных оператором наборов бумаг. 6

Принадлежность бумаги к набору. 6

Управление принадлежностью бумаг к набору бумаг. 6

Получить наименование бумаги по её идентификатору. 6

Получить сектора для бумаги по её идентификатору. 6

Данные: 7

Данные за определенный день по группе бумаг: 7

Данные по бумаге за период. 7

Данные укрупненные. 7

Последние даты существования данных. 8

Существование сделок для бумаги по определенному режиму торгов за указанную дату. 8

Получить последнюю котировку бумаги. 8

Навигация. 8

Навигация для данных за определенный день по группе бумаг. 9

Навигация для данных по бумаге за период. 9

Навигация для данных укрупненных. 10

Рассчитать периоды.. 10

Навигация (старые функции) 10

Навигация для данных за определенный день по группе бумаг. 11

Навигация для данных по бумаге за период. 12

Навигация для данных укрупненных. 12

Данные в DBF-формате. 12

Сформировать данные по сектору (по бумаге/списку, за дату/период) 12

Сформировать данные по сделкам по бумаге, режиму торгов и дате. 13

НЕ нашли? Не то? Что вы ищете?

Сформировать данные за месяц по сектору. 13

Календарь: 13

Года существования данных по бумаге/списку бумаг. 13

Месяца существования данных по бумаге/списку бумаг для указанного года. 13

Дни существования данных по бумаге/списку бумаг для указанных года и месяца. 14

Общие положения:

Весь интерфейс организован на хранимых процедурах.

Все данные разделены по рынкам, рынки разделены на сектора.

Данные представляются в виде таблиц с несколькими предзаданными наборами полей.

Общие функции:

Список рынков

CREATE FUNCTION get_markets(

market VARCHAR(если NULL - возвращает все рынки

) RETURNING

VARCHAR(32), -- идентификатор

VARCHAR(1наименование

WITH RESUME

Список секторов

CREATE FUNCTION get_sectors(

market VARCHAR(32), -- идентификатор рынка

sector VARCHAR(если NULL- возвращает все сектора

) RETURNING

VARCHAR(32), -- идентификатор сектора

VARCHAR(1наименование сектора

WITH RESUME

Зарегестрировать пользователя в системе для данного сектора

Необходимо для сбора статистики посещений пользователей

CREATE FUNCTION register_user(

id_user VARCHAR(20), -- идентификатор пользователя (кука)

sector VARCHAR(идентификатор сектора

) RETURNING

SMALLINT -- 1 если было добавление пользователя, 0 – если нет.

Поля:

Описание полей

CREATE FUNCTION get_fields(

sector VARCHAR(32), -- идентификатор сектора

is_group INT -- =1 при укрупнении

) RETURNING

VARCHAR(32), -- идентификатор поля

NVARCHAR(64), -- краткое наименование поля (как в шапке таблицы)

NVARCHAR(64), -- краткое наименование группы полей (как в шапке таблицы)

NVARCHAR(1полное наименование поля

WITH RESUME

Список наборов полей

CREATE FUNCTION get_fields_lists(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(32), -- идентификатор набора

VARCHAR(наименование набора

WITH RESUME

Принадлежность поля к набору

CREATE FUNCTION is_field_in_list(

sector VARCHAR(32), -- идентификатор сектора

field VARCHAR(32), -- идентификатор поля

field_list VARCHAR(идентификатор набора

) RETURNING

SMALLINT -- =1 если принадлежит, =0 иначе

Описание полей данных по сделкам

CREATE FUNCTION get_rees_fields(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(10), -- идентификатор поля

NVARCHAR(описание поля

WITH RESUME

Описание полей в файле DBF

CREATE FUNCTION get_dbf_fields(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(10), -- идентификатор поля

NVARCHAR(1описание поля

WITH RESUME

Данные для шапки таблицы

Предпоследний возвращаемый столбец содержит пары 10-11, 20-21 и т. д. Первое значение в паре указывает на индикативное поле (то, по которому определяется знак измененния), второе указывает поле, которое изменялось (для отрисовки стрелки изменения)

CREATE FUNCTION fields_title(

sector VARCHAR(32), -- идентификатор сектора

field_list VARCHAR(20), -- идентификатор набора

is_group INT -- =1 для шапки при укрупнении

) RETURNING

VARCHAR(64), -- наименование поля

VARCHAR(64), -- наименование группы полей

INT, -- индикатор раскраски колонок

INT -- =1 для колонки со сделками, =2 для текстовых данных (спец. вывод) =3 для поля даты, =4 нужна ссылка на описание бумаги

WITH RESUME

Пример вызова:

EXECUTE FUNCTION fields_title('securies', 'full', 0)

Ответ:

Краткое наименование ценной бумаги

4

Режим торгов

2

Дата торгов

3

Средневзвешенная

Цена сделки

11

Изменение средневзвешенной

Цена сделки

10

Рыночная

Цена сделки

Открытия

Цена сделки

Периода открытия

Цена сделки

Последней

Цена сделки

21

Изменение цены последней

Цена сделки

20

Периода закрытия

Цена сделки

Минимальная

Цена сделки

Максимальная

Цена сделки

Последней предыдущего дня

Цена сделки

Цена предложения

Цена предложения

Наименьшая

Цена предложения

Цена спроса

Цена спроса

Наибольшая

Цена спроса

Сумма сделок за день, руб

Объем сделок за день в единицах

Количество сделок за день, штук

1

Бумаги:

Есть заданные оператором наборы бумаг и набор бумаг, заданный пользователем.

У пользовательского набора идентификатор=кука (уникальная; 20 символов).

Список бумаг

CREATE FUNCTION get_secs(

sector VARCHAR(32), -- идентификатор сектора

instr VARCHAR(4), -- идентификатор инструмента, если =NULL то для всех инструментов

id_list VARCHAR(20), -- идентификатор набора, если =NULL то для всех наборов

p_active SMALLINT -- если =1 то ищется только среди бумаг с признаком «Торгуется на ММВБ»

) RETURNING

VARCHAR(12), -- идентификатор бумаги

VARCHAR(64), -- наименование бумаги

VARCHAR(4), -- идентификатор инструмента

VARCHAR(1наименование инструмента

WITH RESUME

Поиск бумаги

Все строки поиска должны содержать концевой знак процента

CREATE FUNCTION find_secs(

sector VARCHAR(32), -- идентификатор сектора

sec VARCHAR(12), -- строка поиска по идентификатору

name NVARCHAR(128), -- строка поиска по наименованию

p_active SMALLINT -- если =1 то ищется только среди бумаг с признаком «Торгуется на ММВБ»

) RETURNING

VARCHAR(12), -- идентификатор бумаги

VARCHAR(64), -- наименование бумаги

VARCHAR(4), -- идентификатор инструмента

VARCHAR(1наименование инструмента

Список инструментов

Лучше не использовать, добавлена для совместимости с черновиком

CREATE FUNCTION get_instrs(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(4), -- идентификатор инструмента

VARCHAR(наименование инструмента

Список режимов торгов:

CREATE FUNCTION get_boards(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(32), -- идентификатор режима торгов

VARCHAR(1наименование режима торгов

WITH RESUME

Список заданных оператором наборов бумаг

CREATE FUNCTION get_secs_lists(

sector VARCHAR(идентификатор сектора

) RETURNING

VARCHAR(32), -- идентификатор набора

VARCHAR(наименование набора

WITH RESUME

Принадлежность бумаги к набору

CREATE FUNCTION sec_in_list(

sector VARCHAR(32), -- идентификатор сектора

sec VARCHAR(12), -- идентификатор бумаги

id_list VARCHAR(идентификатор набора (кука)

) RETURNING

SMALLINT -- 1 если принадлежит

Управление принадлежностью бумаг к набору бумаг

CREATE FUNCTION sec_to_list(

sector VARCHAR(32), -- идентификатор сектора

sec VARCHAR(12), -- идентификатор бумаги

id_list VARCHAR(20), -- идентификатор набора

is_set SMALLINT -- если 1 - то вставить бумагу в набор,

если 0 - то удалить бумагу из набора

) RETURNING

SMALLINT -- возвращает 0, если нужна вставка, а в наборе больше 10 бумаг – ограничение на кол-во бумаг в наборе. В любом другом случае возвращет 1.

Получить наименование бумаги по её идентификатору

CREATE FUNCTION get_sec_name(

sector VARCHAR(32), -- идентификатор сектора

sec VARCHAR(идентификатор бумаги

) RETURNING NVARCHAR(128) – наименование бумаги

Получить сектора для бумаги по её идентификатору

CREATE FUNCTION get_sector_by_sec(

p_sec VARCHAR(идентификатор бумаги

) RETURNING VARCHAR(32), NVARCHAR(128)

Данные:

Многие процедуры в имени содержат

идентификатор сектора – макрос подстановки %%SECTOR%%

идентификатор набора полей – макрос подстановки %%FIELDS_LIST_NAME%%

список возвращаемых полей (в зав-ти от набора полей) - макрос подстановки %%FIELDS_LIST_RETURN%%

Например, get_data_day_%%SECTOR%%_%%FIELDS_LIST_NAME%% для рынка securies раскрывается в get_data_day_securies_full, get_data_day_securies_middle и get_data_day_securies_short

Данные за определенный день по группе бумаг:

CREATE FUNCTION get_data_day_%%SECTOR%%_%%FIELDS_LIST_NAME%%(

begin_pos INT, -- начальная позиция

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_show DATE, -- дата торгов

only_active INT -- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- позиция строки данных

VARCHAR(12), -- идентификатор бумаги

VARCHAR(4), -- идентификатор режима торгов

CHAR(10), -- дата торгов в строковом формате %Y-%m-%d

%%FIELDS_LIST_RETURN%% -- собственно данные

WITH RESUME

Данные по бумаге за период

CREATE FUNCTION get_data_%%SECTOR%%_%%FIELDS_LIST_NAME%%(

begin_pos INT, -- начальная позиция

securie VARCHAR(12), -- идентификатор бумаги

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_from DATE, -- дата начала периода

date_to DATE, -- дата конца периода

only_active INT-- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- позиция строки данных

VARCHAR(12), -- идентификатор бумаги

VARCHAR(4), -- идентификатор режима торгов

CHAR(10), -- дата торгов в строковом формате %Y-%m-%d

%%FIELDS_LIST_RETURN%% -- собственно данные

WITH RESUME

Данные укрупненные

CREATE FUNCTION get_data_group_%%SECTOR%%_%%FIELDS_LIST_NAME%%(

begin_pos INT, -- начальная позиция

securie VARCHAR(12), -- идентификатор бумаги

если NULL то учитывается значение sec_list

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

year_show INT, -- год: от 1990 до...

если 0, то все года и не учитываются quart_show и month_show

quart_show INT, -- квартал: от 1 до 4 (значение month_show не учитывается)

если 0 - то в зав-ти от значения month_show

month_show INT -- месяц: от 1 до 12

если 0 - то все месяца

) RETURNING

INT, -- позиция строки данных

VARCHAR(12), -- идентификатор бумаги

VARCHAR(4), -- идентификатор режима торгов

CHAR(10), -- всегда NULL (дата торгов в строковом формате)

%%FIELDS_LIST_RETURN%% -- собственно данные

WITH RESUME

Последние даты существования данных

Должен быть указан или набор, или бумага

CREATE FUNCTION last_dates_%%SECTOR%%(

sec_list VARCHAR(20), -- идентификатор набора бумаг

securie VARCHAR(12), -- идентификатор бумаги

board VARCHARидентификатор режима торгов (если NULL то все)

) RETURNING

INT, -- день \

INT, -- месяц – последняя дата существования для набора бумаг, начало последнего периода для бумаги

INT, -- год /

INT, -- день \

INT, -- месяц – NULL для набора бумаг, конец последнего периода для бумаги

INT -- год /

Существование сделок для бумаги по определенному режиму торгов за указанную дату

Если указана только дата (первые 2 параметра =NULL) то выдается существование сделок за день

CREATE FUNCTION trades_exist_%%SECTOR%%(

p_id VARCHAR(12), -- идентификатор бумаги

p_board VARCHAR(4), -- идентификатор режима торгов

p_trdate DATE -- дата торгов

) RETURNING

SMALLINT – 1 – существуют, 0 - нет

Получить последнюю котировку бумаги

CREATE FUNCTION get_last_quote_%%SECTOR%%(

securie VARCHAR(идентификатор бумаги

) RETURNING DATE, FLOAT, FLOAT

DATE -- дата торгов

FLOAT – котировка (последняя цена)

FLOAT – изменение котировки

Навигация

Функции возвращают начальные позиции страниц и их названия. Вызовы функций практически идентичны соответствующим функциям формирования данных. Для первых вызовов устанавливать begin_pos=0. Для группы страниц можно кэшировать вызовы _sets2_ функций, т. к. они идентичны.

Пример использования:

Вызов:

EXECUTE FUNCTION get_data_sets2_securies( 0, 'RU', NULL, DATETIME() YEAR TO DAY, DATETIME() YEAR TO DAY, 0)

Result set:

1

28.01.2000

С

2

11.02.2000

С

3

25.02.2000

С

4

13.03.2000

С

5

27.03.2000

С

6

10.04.2000

N

Отобразить нужно в:

28.01.2000

11.02.2000

25.02.2000

13.03.2000

27.03.2000

>>> 

6

Ссылка >>> приведет к формированию сл. сета:

Вызов:

EXECUTE FUNCTION get_data_sets2_securies( 6, 'RU', NULL, DATETIME() YEAR TO DAY, DATETIME(2002-YEAR TO DAY, 0)

Result set:

1

28.01.2000

P

6

10.04.2000

C

7

24.04.2000

C

8

11.05.2000

C

9

25.05.2000

C

10

08.06.2000

C

11

23.06.2000

N

Отобразить нужно в:

<<< 

10.04.2000

24.04.2000

11.05.2000

25.05.2000

08.06.2000

>>> 

1

11

Пять ссылок с датами приводят к одинаковому вызову get_data_sets_securies.

Навигация для данных за определенный день по группе бумаг

CREATE FUNCTION get_data_day_sets2_%%SECTOR%%(

begin_pos INT, -- номер начального окна для сета

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_show DATE, -- дата торгов

only_active INT -- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- номер окна

INT, -- первая позиция строки данных страницы (для передачи в get_data_day в качестве begin_pos)

VARCHAR(32), -- данные для вывода пользователю

CHARпризнак навигации: P – начало предыдущего сета; C – окна в текущем сете; N – начало сл. сета.

Навигация для данных по бумаге за период

CREATE FUNCTION get_data_sets2_%%SECTOR%%(

begin_pos INT, -- начальная позиция

securie VARCHAR(12), -- идентификатор бумаги

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_from DATE, -- дата начала периода

date_to DATE, -- дата конца периода

only_active INT-- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- номер окна

INT, -- первая позиция строки данных страницы (для передачи в get_data в качестве begin_pos)

VARCHAR(32), -- данные для вывода пользователю

CHARпризнак навигации: P – начало предыдущего сета; C – окна в текущем сете; N – начало сл. сета.

Навигация для данных укрупненных

CREATE FUNCTION get_data_group_sets2_%%SECTOR%%(

begin_pos INT, -- начальная позиция

securie VARCHAR(12), -- идентификатор бумаги

если NULL то учитывается значение sec_list

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

year_show INT, -- год: от 1990 до...

если 0, то все года и не учитываются quart_show и month_show

quart_show INT, -- квартал: от 1 до 4 (значение month_show не учитывается)

если 0 - то в зав-ти от значения month_show

month_show INT -- месяц: от 1 до 12

если 0 - то все месяца

) RETURNING

INT, -- номер окна

INT, -- первая позиция строки данных страницы (для передачи в get_data_group в качестве begin_pos)

VARCHAR(32), -- данные для вывода пользователю

CHARпризнак навигации: P – начало предыдущего сета; C – окна в текущем сете; N – начало сл. сета.

Рассчитать периоды

Используется для ссылок из таблицы с укрупненными данными

CREATE FUNCTION calc_dates_num(

year_show INT, -- год

quart_show INT, -- квартал

month_show INT -- месяц

) RETURNING

INT, -- день начала периода

INT, -- месяц начала периода

INT, -- год начала периода

INT, -- день конца периода

INT, -- месяц конца периода

INT -- год конца периода

Навигация (старые функции)

Функции возвращают начальные позиции страниц и их названия. Вызовы функций практически иденитчны соответствующим функциям формирования данных. Признак окончания навигации =0 для обыкновенных страниц и =1 для перехода на следующую группу страниц. Необходимо вести историю переходов по группам страниц, так как при возврате на предыдущие группы нужно указывать begin_pos.

Для первых вызовов устанавливать begin_pos=0. Для группы страниц можно кэшировать вызовы _sets_ функций, т. к. они идентичны.

Пример использования:

Вызов:

EXECUTE FUNCTION get_data_sets_securies( 0, 'RU', NULL, DATETIME() YEAR TO DAY, DATETIME() YEAR TO DAY, 0)

Result set:

1

28.01.2000

0

21

11.02.2000

0

41

25.02.2000

0

61

13.03.2000

0

81

27.03.2000

0

101

10.04.2000

1

Отобразить нужно в:

28.01.2000

11.02.2000

25.02.2000

13.03.2000

27.03.2000

>>> 

Ссылка >>> приведет к формированию сл. сета:

Вызов:

EXECUTE FUNCTION get_data_sets_securies( , 'RU', NULL, DATETIME() YEAR TO DAY, DATETIME(2002-YEAR TO DAY, 0)

Result set:

1

10.04.2000

0

21

24.04.2000

0

41

11.05.2000

0

61

25.05.2000

0

81

08.06.2000

0

101

23.06.2000

1

Отобразить нужно в:

<<< 

10.04.2000

24.04.2000

11.05.2000

25.05.2000

08.06.2000

>>> 

Зеленым выделена начальная позиция для предыдущего сета. При переходе >>> нужно запоминать все начальные позиции для предыдущих сетов. Пять ссылок с датами приводят к одинаковому вызову get_data_sets_securies.

Навигация для данных за определенный день по группе бумаг

CREATE FUNCTION get_data_day_sets_%%SECTOR%%(

begin_pos INT, -- начальная позиция

prew_windows INT, -- кол-во предыдущих окон (для правильного формирования номеров страниц)

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_show DATE, -- дата торгов

only_active INT -- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- не используется

INT, -- первая позиция строки данных страницы (для передачи в get_data_day в качестве begin_pos)

VARCHAR(32), -- строка отображения страницы

INT -- признак окончания навигации (=1)

Навигация для данных по бумаге за период

CREATE FUNCTION get_data_sets_%%SECTOR%%(

begin_pos INT, -- начальная позиция

securie VARCHAR(12), -- идентификатор бумаги

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_from DATE, -- дата начала периода

date_to DATE, -- дата конца периода

only_active INT-- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

) RETURNING

INT, -- не используется

INT, -- первая позиция строки данных страницы (для передачи в get_data в качестве begin_pos)

VARCHAR(32), -- строка отображения страницы

INT -- признак окончания навигации (=1)

Навигация для данных укрупненных

CREATE FUNCTION get_data_group_sets_%%SECTOR%%(

begin_pos INT, -- начальная позиция

prew_windows INT, -- кол-во предыдущих окон (для правильного формирования номеров страниц)

securie VARCHAR(12), -- идентификатор бумаги

если NULL то учитывается значение sec_list

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

year_show INT, -- год: от 1990 до...

если 0, то все года и не учитываются quart_show и month_show

quart_show INT, -- квартал: от 1 до 4 (значение month_show не учитывается)

если 0 - то в зав-ти от значения month_show

month_show INT -- месяц: от 1 до 12

если 0 - то все месяца

) RETURNING

INT, -- не используется

INT, -- первая позиция строки данных страницы (для передачи в get_data_group в качестве begin_pos)

VARCHAR(32), -- строка отображения страницы

INT -- признак окончания навигации (=1)

Данные в DBF-формате

Сформировать данные по сектору (по бумаге/списку, за дату/период)

Должна быть указана или бумага, или список; хотя бы одна дата.

CREATE FUNCTION get_dbf (

sector VARCHAR(32), -- сектор

sec VARCHAR(12), -- идентификатор бумаги

sec_list VARCHAR(20), -- идентификатор набора бумаг

board VARCHAR(4), -- идентификатор режима торгов (если NULL то все)

date_from DATE, -- дата начала периода

date_to DATE, -- дата конца периода

only_active SMALLINT, -- если 1 то возвращаются только

дни с активностью на рынке (numtrades>0)

file_name VARCHAR(2если NULL то функция сама формирует имя файла

) RETURNING

VARCHAR(2или разделенные плюсом «+» имя файла без расширения

и BLOB-идентификатор, если данные успешно сформированы;

или строка, содержащая «NO DATA», если данных за период / дату нет;

или NULL, если выборка оказалась слишком большой (больше заданной в настройках оператором)

Сформировать данные по сделкам по бумаге, режиму торгов и дате

CREATE FUNCTION get_rees_dbf (

sector VARCHAR(32), -- идентификатор сектора

sec VARCHAR(12), -- идентификатор бумаги

board VARCHAR(4), -- идентификатор режима торгов

date_show DATE -- дата торгов

) RETURNING

VARCHAR(2или разделенные пробелом имя файла без расширения

и BLOB-идентификатор, если данные успешно сформированы;

или строка, содержащая «NO DATA», если данных за период / дату нет;

или NULL, если выборка оказалась слишком большой (больше заданной в настройках оператором)

Сформировать данные за месяц по сектору

CREATE FUNCTION get_mobth_dbf (

sector VARCHAR(32), -- сектор

month SMALLINT – месяц, îò 1 äî 12

year SMALLINT – год, от 1990 до …

) RETURNING

VARCHAR(2или разделенные пробелом имя файла без расширения

и BLOB-идентификатор, если данные успешно сформированы;

или строка, содержащая «NO DATA», если данных за период / дату нет;

или NULL, если выборка оказалась слишком большой (больше заданной в настройках оператором)

Календарь:

Года существования данных по бумаге/списку бумаг

CREATE FUNCTION exist_years_%%SECTOR%% (

sec_list VARCHAR(20), -- ид-р списка бумаг, если NULL, то берется ид-р бумаги

securie VARCHAR(12), -- ид-р бумаги (не рассматривается, если sec_list не NULL)

board VARCHARид-р режима торгов (если NULL, то по всем)

) RETURNING

INT, -- первый год

INT -- последний год

Месяца существования данных по бумаге/списку бумаг для указанного года

CREATE FUNCTION exist_months_%%SECTOR%%(

sec_list VARCHAR(20), -- ид-р списка бумаг, если NULL, то берется ид-р бумаги

securie VARCHAR(12), -- ид-р бумаги (не рассматривается, если sec_list не NULL)

board VARCHAR(4), -- ид-р режима торгов (если NULL, то по всем)

year_for INT -- год

) RETURNING

INT, -- первый месяц

INT -- последний месяц

Дни существования данных по бумаге/списку бумаг для указанных года и месяца

CREATE FUNCTION exist_days_%%SECTOR%%(

sec_list VARCHAR(20), -- ид-р списка бумаг, если NULL, то берется ид-р бумаги

securie VARCHAR(12), -- ид-р бумаги (не рассматривается, если sec_list не NULL)

board VARCHAR(4), -- ид-р режима торгов (если NULL, то по всем)

year_for INT, -- год

month_for INT -- месяц

) RETURNING

INT, -- день месяца

INT, -- номер дня недели (0 – воскресенье, 1 – понедельник и т. д.)

DATE -- дата, если не NULL, то за данный день торги были

WITH RESUME

Пример вызова:

execute function exist_days_securies('EQIN', NULL, NULL, 2001, 11)

Ответ

1

4

2

5

3

6

4

0

5

1

6

2

7

3

8

4

9

5

10

6

11

0

12

1

13

2

14

3