×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

4.3.3. Выполнение команд SQL

4.3.3.1. Выполнение операторов SQL
4.3.3.2. Использование курсоров
4.3.3.3. Управление транзакциями
4.3.3.4. Подготовленные операторы

Любая команда SQL может быть выполнена из приложения с внедренным SQL. Ниже приведены примеры того, как это сделать.

4.3.3.1. Выполнение операторов SQL #

Создание таблицы:

EXEC SQL CREATE TABLE foo (number integer, ascii char(16));
EXEC SQL CREATE UNIQUE INDEX num1 ON foo(number);
EXEC SQL COMMIT;

Вставка строк:

EXEC SQL INSERT INTO foo (number, ascii) VALUES (9999, 'doodad');
EXEC SQL COMMIT;

Удаление строк:

EXEC SQL DELETE FROM foo WHERE number = 9999;
EXEC SQL COMMIT;

Обновление данных:

EXEC SQL UPDATE foo
    SET ascii = 'foobar'
    WHERE number = 9999;
EXEC SQL COMMIT;

SELECT инструкции, возвращающие одну строку результата, также могут быть выполнены с использованием команда EXEC SQL напрямую. Для обработки результирующих наборов, содержащих несколько строк, приложение должно использовать курсор; см. Раздел 4.3.3.2 ниже. (В качестве особого случая приложение может извлекать сразу несколько строк в главную переменную типа массив; см. Раздел 4.3.4.4.3.1.)

Выборка одной строки (SELECT):

EXEC SQL SELECT foo INTO :FooBar FROM table1 WHERE ascii = 'doodad';

Кроме того, значение параметра конфигурации можно получить с помощью SHOW команды:

EXEC SQL SHOW search_path INTO :var;

Токены в формате :something are главные переменные, то есть они ссылаются на переменные в программе на языке C. Они описаны в Раздел 4.3.4.

4.3.3.2. Использование курсоров #

Для получения результирующего набора, содержащего несколько строк, приложение должно объявить курсор и извлечь каждую строку из этого курсора. Процесс использования курсора включает следующие шаги: объявление курсора, выполнение оператора OPEN, извлечение строки из курсора, повторение и, наконец, закрытие курсора.

Выборка данных с использованием курсоров:

EXEC SQL DECLARE foo_bar CURSOR FOR
    SELECT number, ascii FROM foo
    ORDER BY ascii;
EXEC SQL OPEN foo_bar;
EXEC SQL FETCH foo_bar INTO :FooBar, DooDad;
...
EXEC SQL CLOSE foo_bar;
EXEC SQL COMMIT;

Для получения более подробной информации об объявлении курсора см. раздел DECLARE; для получения дополнительных сведений об извлечении строк из курсора см. раздел FETCH.

Примечание

Препроцессор ECPG DECLARE команда фактически не инициирует отправку оператора серверной части PostgreSQL. Курсор открывается на стороне сервера (с использованием серверной DECLARE команда) в тот момент, когда OPEN выполняется данная команда.

4.3.3.3. Управление транзакциями #

В режиме по умолчанию фиксация инструкций выполняется только в том случае, когда EXEC SQL COMMIT выполняется. Интерфейс внедренного SQL также поддерживает автоматическую фиксацию транзакций (аналогично psqlповедению по умолчанию) с помощью -t параметра командной строки для ecpg (см. ecpg) или с помощью EXEC SQL SET AUTOCOMMIT TO ON statement. В режиме автоматической фиксации (autocommit) каждая команда фиксируется автоматически, за исключением случаев, когда она выполняется внутри явного блока транзакции. Данный режим можно явно отключить, используя EXEC SQL SET AUTOCOMMIT TO OFF.

Доступны следующие команды управления транзакциями:

EXEC SQL COMMIT #

Зафиксировать выполняемую транзакцию.

EXEC SQL ROLLBACK #

Откатить выполняемую транзакцию.

EXEC SQL PREPARE TRANSACTION transaction_id #

Подготовить текущую транзакцию для двухфазной фиксации.

EXEC SQL COMMIT PREPARED transaction_id #

Зафиксировать транзакцию, находящуюся в подготовленном состоянии.

EXEC SQL ROLLBACK PREPARED transaction_id #

Откатить транзакцию, находящуюся в подготовленном состоянии.

EXEC SQL SET AUTOCOMMIT TO ON #

Включить режим автоматической фиксации.

EXEC SQL SET AUTOCOMMIT TO OFF #

Отключить режим автоматической фиксации. Данный вариант используется по умолчанию.

4.3.3.4. Подготовленные операторы #

Если значения, передаваемые в SQL-оператор, неизвестны на этапе компиляции или один и тот же оператор должен быть выполнен многократно, целесообразно использовать подготовленные операторы.

Подготовка оператора осуществляется с помощью команды PREPARE. Для указания значений, которые еще неизвестны, используйте плейсхолдер «?»:

EXEC SQL PREPARE stmt1 FROM "SELECT oid, datname FROM pg_database WHERE oid = ?";

Если оператор возвращает одну строку, приложение может вызвать оператор EXECUTE после PREPARE оператор EXECUTE для выполнения подготовленного выражения, передавая фактические значения для плейсхолдеров через USING clause:

EXEC SQL EXECUTE stmt1 INTO :dboid, :dbname USING 1;

Если оператор возвращает несколько строк, приложение может использовать курсор, объявленный на основе подготовленного оператора. Для привязки входных параметров курсор должен быть открыт с использованием USING предложение:

EXEC SQL PREPARE stmt1 FROM "SELECT oid,datname FROM pg_database WHERE oid > ?";
EXEC SQL DECLARE foo_bar CURSOR FOR stmt1;

/* когда достигнут конец набора результатов, выйти из цикла while */
EXEC SQL WHENEVER NOT FOUND DO BREAK;

EXEC SQL OPEN foo_bar USING 100;
...
while (1)
{
    EXEC SQL FETCH NEXT FROM foo_bar INTO :dboid, :dbname;
    ...
}
EXEC SQL CLOSE foo_bar;

Когда подготовленный оператор больше не нужен, его следует удалить из памяти:

EXEC SQL DEALLOCATE PREPARE имя;

Для получения подробной информации о PREPARE, см. PREPARE. Также см. Раздел 4.3.5 для получения подробной информации об использовании заполнителей и входных параметров.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению