Тип array
Тип данных array
реализован DaJet Script в основном для работы с выборками из баз данных, а также для циклической и параллельной обработки данных при помощи команды FOR. Параллельная обработка данных рассмотрена в соответствующем разделе документации DaJet Script.
Начиная с версии DaJet Script 3.9.2, реализованы дополнительные функции для программной работы с типом
array
.
- Создание
array
запросом к базе данных - Создание
array
при помощи функции JSON - Функции для работы с типом
array
- ARRAY_COUNT
- ARRAY_CLEAR
- ARRAY_CREATE
- ARRAY_APPEND
- ARRAY_SELECT
- ARRAY_DELETE
- ARRAY_INSERT
Создание array
запросом к базе данных
-- 1. Создание массива объектов командой DECLARE
DECLARE @object object -- Объект для представления одной записи
USE 'mssql://server/database'
-- Получаем массив объектов из базы данных запросом
DECLARE @array array = SELECT TOP 5
code = Код
, name = Наименование
FROM Справочник.Номенклатура
-- Обработка массива объектов в цикле
FOR @object IN @array
PRINT JSON(@object)
END
END
-- Результат выполнения скрипта
[2024-10-04 19:49:51] {"code":"00000001","name":"Товар 1"}
[2024-10-04 19:49:51] {"code":"00000002","name":"Товар 2"}
[2024-10-04 19:49:51] {"code":"00000003","name":"Товар 3"}
[2024-10-04 19:49:51] {"code":"00000004","name":"Товар 4"}
[2024-10-04 19:49:51] {"code":"00000005","name":"Товар 5"}
-- 2. Создание массива объектов командой SET
DECLARE @array array -- Массив для выборки записей из базы данных
DECLARE @object object -- Объект для представления одной записи выборки
USE 'mssql://server/database'
-- Получаем массив объектов из базы данных запросом
SET @array = SELECT TOP 5
code = Код
, name = Наименование
FROM Справочник.Номенклатура
-- Обработка массива объектов в цикле
FOR @object IN @array
PRINT JSON(@object)
END
END
-- Результат выполнения скрипта
[2024-10-04 19:54:26] {"code":"00000001","name":"Товар 1"}
[2024-10-04 19:54:26] {"code":"00000002","name":"Товар 2"}
[2024-10-04 19:54:26] {"code":"00000003","name":"Товар 3"}
[2024-10-04 19:54:26] {"code":"00000004","name":"Товар 4"}
[2024-10-04 19:54:26] {"code":"00000005","name":"Товар 5"}
-- 3. Создание массива объектов командой SELECT ... INTO
DECLARE @array array -- Массив для выборки записей из базы данных
DECLARE @object object -- Объект для представления одной записи выборки
USE 'mssql://server/database'
-- Получаем массив объектов из базы данных запросом
SELECT TOP 5
code = Код
, name = Наименование
INTO @array
FROM Справочник.Номенклатура
-- Обработка массива объектов в цикле
FOR @object IN @array
PRINT JSON(@object)
END
END
-- Результат выполнения скрипта
[2024-10-04 19:57:21] {"code":"00000001","name":"Товар 1"}
[2024-10-04 19:57:21] {"code":"00000002","name":"Товар 2"}
[2024-10-04 19:57:21] {"code":"00000003","name":"Товар 3"}
[2024-10-04 19:57:21] {"code":"00000004","name":"Товар 4"}
[2024-10-04 19:57:21] {"code":"00000005","name":"Товар 5"}
Создание array
при помощи функции JSON
DECLARE @array array
DECLARE @object object
DECLARE @json string = '[
{ "name": "name 1", "value": 123 },
{ "name": "name 2", "value": 321 },
{ "name": "name 3", "value": 333 }
]'
-- Преобразование JSON в массив объектов
SET @array = JSON(@json)
PRINT 'Вывод результата в формате JSON'
FOR @object IN @array
-- Преобразование object в JSON
PRINT JSON(@object)
END
PRINT 'Вывод результата в формате TEXT'
FOR @object IN @array
PRINT 'Свойство "name" = ' + @object.name
PRINT 'Свойство "value" = ' + @object.value
END
-- Результат выполнения скрипта
[2024-10-04 20:16:43] Вывод результата в формате JSON
[2024-10-04 20:16:43] {"name":"name 1","value":123}
[2024-10-04 20:16:43] {"name":"name 2","value":321}
[2024-10-04 20:16:43] {"name":"name 3","value":333}
[2024-10-04 20:16:43] Вывод результата в формате TEXT
[2024-10-04 20:16:43] Свойство "name" = name 1
[2024-10-04 20:16:43] Свойство "value" = 123
[2024-10-04 20:16:43] Свойство "name" = name 2
[2024-10-04 20:16:43] Свойство "value" = 321
[2024-10-04 20:16:43] Свойство "name" = name 3
[2024-10-04 20:16:43] Свойство "value" = 333
Функции для работы с типом array
Для более удобной работы с типом array
, начиная с версии DaJet Script 3.9.2, реализованы ниже следующие функции. Кроме всего прочего эти функции можно использовать для буферизации отдельных сообщений object
, которые, например, являются частью потока данных команды CONSUME, чтобы организовать их пакетную обработку или доставку.
Таблица функций типа array
Функция | Возврат | Параметры | Описание | Команда USE | Запрос СУБД | Выражение DaJet Script |
---|---|---|---|---|---|---|
ARRAY_COUNT | number | array | Функция возвращает количество элементов соответствующего array . |
нет | нет | да |
ARRAY_CLEAR | number | array | Функция удаляет все элементы массива и возвращает число 0 . |
нет | нет | да |
ARRAY_CREATE | array | нет | Функция создаёт новый array . |
нет | нет | да |
ARRAY_CREATE | array | number | Функция создаёт новый array с указанием начального размера внутреннего буфера. |
нет | нет | да |
ARRAY_APPEND | number | array object |
Функция добавляет object в самый конец array и возвращает индекс нового элемента. |
нет | нет | да |
ARRAY_SELECT | object | array number |
Функция возвращает ссылку на object по его индексу в array . |
нет | нет | да |
ARRAY_DELETE | object | array number |
Функция удаляет элемент по его индексу в array и возвращает ссылку на удалённый object . |
нет | нет | да |
ARRAY_INSERT | number | array number object |
Функция вставляет object по указанному индексу в array и возвращает новое количество элементов в массиве. Если по указанному индексу уже существует элемент, то он и все элементы, следующие за ним, смещаются на один индекс в большую сторону (плюс один). |
нет | нет | да |
Пример использования функций типа array
DECLARE @index number
DECLARE @count number
DECLARE @array array
DECLARE @object object
SET @index = 0
SET @array = ARRAY_CREATE()
SET @object = SELECT Индекс = @index, Имя = 'Code ' + @index
SET @index = ARRAY_APPEND(@array, @object) + 1
SET @object = SELECT Индекс = @index, Имя = 'Code ' + @index
SET @index = ARRAY_APPEND(@array, @object) + 1
SET @object = SELECT Индекс = @index, Имя = 'Code ' + @index
SET @index = ARRAY_APPEND(@array, @object) + 1
SET @index = 0
SET @count = ARRAY_COUNT(@array)
WHILE @index < @count
SET @object = ARRAY_SELECT(@array, @index)
PRINT JSON(@object)
SET @index = @index + 1
END
PRINT 'Количество элементов массива: ' + @count
SET @object = ARRAY_DELETE(@array, 1)
SET @count = ARRAY_INSERT(@array, 0, @object)
PRINT 'Количество после DELETE и INSERT: ' + @count
SET @object = ARRAY_SELECT(@array, 0)
SET @index = ARRAY_APPEND(@array, @object)
PRINT 'Количество после SELECT и APPEND: ' + ARRAY_COUNT(@array)
PRINT 'Индекс последнего элемента: ' + @index
FOR @object IN @array
PRINT JSON(@object)
END
Результат выполнения скрипта
[2025-02-08 17:03:15] {"Индекс":0,"Имя":"Code 0"}
[2025-02-08 17:03:15] {"Индекс":1,"Имя":"Code 1"}
[2025-02-08 17:03:15] {"Индекс":2,"Имя":"Code 2"}
[2025-02-08 17:03:15] Количество элементов массива: 3
[2025-02-08 17:03:15] Количество после DELETE и INSERT: 3
[2025-02-08 17:03:15] Количество после SELECT и APPEND: 4
[2025-02-08 17:03:15] Индекс последнего элемента: 3
[2025-02-08 17:03:15] {"Индекс":1,"Имя":"Code 1"}
[2025-02-08 17:03:15] {"Индекс":0,"Имя":"Code 0"}
[2025-02-08 17:03:15] {"Индекс":2,"Имя":"Code 2"}
[2025-02-08 17:03:15] {"Индекс":1,"Имя":"Code 1"}