Spec-Zone.ru › MySQL Shell 9.2

5.6 Выполнение пакетного кода

Помимо интерактивного выполнения кода, MySQL Shell предоставляет возможность выполнения пакетного кода из:

  • Файла, загруженного для обработки.

  • Файла, содержащего код, который перенаправляется на стандартный ввод для выполнения.

  • Кода из другого источника, который перенаправляется на стандартный ввод для выполнения.

Подсказка

В качестве альтернативы пакетному выполнению файла, вы также можете управлять MySQL Shell из терминала, см. Раздел 5.8, «Интеграция API командной строки».

В пакетном режиме вся логика команд, описанная в Разделе 5.2, «Интерактивное выполнение кода», недоступна; может выполняться только допустимый код для активного языка. При обработке SQL-кода он выполняется оператор за оператором с использованием следующей логики: чтение/обработка/вывод результата. При обработке кода, не являющегося SQL, он полностью загружается из источника ввода и выполняется как единое целое. Используйте параметр командной строки --interactive (или -i), чтобы настроить MySQL Shell на обработку источника ввода так, как если бы он вводился в интерактивном режиме; это позволяет использовать все возможности интерактивного режима при пакетной обработке.

Примечание

В этом случае, независимо от источника, он читается построчно и обрабатывается с использованием интерактивной конвейерной обработки.

Обработка ввода выполняется на основе текущего языка программирования, выбранного в MySQL Shell, который по умолчанию устанавливается в JavaScript. Вы можете изменить язык программирования по умолчанию, используя параметр конфигурации MySQL Shell defaultMode. Файлы с расширениями .js, .py и .sql всегда обрабатываются в соответствующем режиме языка, независимо от языка программирования по умолчанию.

В этом примере показано, как загрузить JavaScript-код из файла для пакетной обработки:

$> mysqlsh --file code.js

Здесь JavaScript-файл перенаправляется на стандартный ввод для выполнения:

$> mysqlsh < code.js

Следующий пример демонстрирует, как перенаправить SQL-код на стандартный ввод для выполнения на платформах Linux:

$> echo "show databases;" | mysqlsh --sql --uri user@192.0.2.20:33060
Примечание

Чтобы запустить эту команду на платформах Windows, необходимо удалить кавычки, окружающие строку в команде echo.

Доступен параметр командной строки --pym для выполнения указанного Python-модуля как скрипта в режиме Python. Параметр работает аналогично параметру командной строки Python -m.

Выполняемые скрипты

В Linux вы можете создавать исполняемые скрипты, которые запускаются с помощью MySQL Shell, включив строку #! в качестве первой строки скрипта. Эта строка должна содержать полный путь к MySQL Shell и включать параметр --file. Например:

#!/usr/local/mysql-shell/bin/mysqlsh --file
print("Hello World\n");

Файл скрипта должен быть помечен как исполняемый в файловой системе. Запуск скрипта вызывает MySQL Shell, который выполняет содержимое скрипта.

Выполнение SQL-запросов в скриптах

Выполнение SQL-запросов для сессий протокола X обычно использует функцию sql(), которая принимает SQL-запрос в виде строки и возвращает объект SqlExecute, который вы используете для привязки и выполнения запроса и возврата результатов. Этот метод описан в . Однако выполнение SQL-запросов для сессий классического протокола MySQL использует функцию runSql(), которая принимает SQL-запрос и его параметры, привязывает указанные параметры к указанному запросу и выполняет запрос в одном шаге, возвращая результаты.

Если вам нужно создать скрипт MySQL Shell, который не зависит от протокола, используемого для подключения к серверу MySQL, MySQL Shell предоставляет функцию session.runSql() для протокола X, которая работает аналогично функции runSql() в сессиях классического протокола MySQL. Вы можете использовать эту функцию в MySQL Shell только вместо sql(), чтобы ваш скрипт работал с сессией протокола X или сессией классического протокола MySQL. Session.runSql() возвращает объект SqlResult, который соответствует спецификации объекта ClassicResult, возвращаемого функцией классического протокола MySQL, поэтому результаты можно обрабатывать аналогичным образом.

Примечание

Session.runSql() является эксклюзивной для реализации MySQL Shell X DevAPI в JavaScript и Python и не входит в стандарт X DevAPI.

Для просмотра результатов запроса можно использовать функцию fetchOneObject(), которая работает как для классического протокола MySQL, так и для протокола X. Эта функция возвращает следующий результат в виде скриптового объекта. Имена столбцов используются в качестве ключей в словаре (и в качестве атрибутов объекта, если они являются допустимыми идентификаторами), а значения строк используются в качестве значений атрибутов в словаре. Изменения, внесенные в объект, не сохраняются в базе данных.

Например, этот код в скрипте MySQL Shell работает с сессией протокола X или сессией классического протокола MySQL для извлечения и вывода имени города из данной страны:

var resultSet = mySession.runSql("SELECT * FROM city WHERE countrycode = ' AUT'");
var row = resultSet.fetchOneObject();
print(row['Name']);

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/mysql-shell-batch-code-execution.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API