Skip to the content.

Начало

Произвольные запросы СУБД на “родном” SQL

Начиная с версии DaJet Script 3.9.8, расширены возможности команды REQUEST для выполнения произвольных запросов к СУБД на соответствующем “родном” для неё диалекте SQL. Для возврата результата выполнения запроса SQL требуется использование команды DEFINE, которая в данном случае используется как определение контракта данных между DaJet Script и СУБД. Ниже по ссылкам можно найти примеры использования команды REQUEST для каждой конкретной СУБД:

Для переключения команды REQUEST в режим выполнения произвольных запросов SQL необходимо в строке подключения после ? добавить параметр sql. Например вот так:

REQUEST 'pgsql://postgres:postgres@localhost:5432/database?sql'

В данном варианте использования команда REQUEST не требует наличия команды USE для создания соответствующего контекста базы данных. Вызов скрипта SQL выполняется в собственном контексте, заданном строкой подключения.

Полный синтаксис команды REQUEST:

REQUEST 'url?sql'
   WITH <options>
[SELECT <input-parameters>]
  [INTO <output-variable>]

<url> - строка подключения к соответствующей СУБД.
<options> - опции (настройки) выполнения скрипта SQL.
<input-parameters> - параметры скрипта (запроса) SQL.
<output-variable> - переменная типа object или array, в которую возвращается результат выполнения запроса SQL.

Таблица опций (настроек) команды REQUEST

Параметр Тип данных Описание
Script string Текст выполняемого запроса SQL, переменная строкового типа или ссылка на файл, который содержит скрипт SQL.
Timeout number Таймаут выполнения команды SQL в секундах. Значение по умолчанию: 30.
Transaction string Необязательная опция для выполнения команды SQL в транзакции. По умолчанию команда выполняется без открытия транзакции СУБД. Допустимые значения (разные СУБД поддерживают только те или иные значения):
- ‘ReadUncommitted’
- ‘ReadCommitted’
- ‘RepeatableRead’
- ‘Serializable’
- ‘Snapshot’
Stream boolean Необязательная опция выполнения команды REQUEST в потоковом (TRUE) или обычном (FALSE) режиме. Значение по умолчанию: FALSE.

Более подробно про потоковые команды и их поведение можно посмотреть в соответствующей документации по командам STREAM или CONSUME. В случае использования команды REQUEST в потоковом режиме в предложении INTO должна использоваться переменная типа object.

Наверх

Визуальная схема сопоставления скриптов SQL и DaJet Script

Схема сопоставления скриптов SQL и DaJet Script