MySQL Shell 8.0  /  MySQL Shell コードの実行  /  バッチコード実行

このページは機械翻訳したものです。

5.6 バッチコード実行

MySQL Shell では、対話型コードの実行に加えて、次からバッチコードを実行できます:

  • 処理のためにロードされたファイル。

  • 実行のために標準入力にリダイレクトされるコードを含むファイル。

  • 実行のために標準入力にリダイレクトされる別のソースからのコード。

ヒント

ファイルのバッチ実行のかわりに、端末から MySQL Shell を制御することもできます。セクション5.8「API コマンドラインインタフェース」 を参照してください。

バッチモードでは、セクション5.2「対話型コードの実行」 で説明されているすべてのコマンドロジックを使用できず、アクティブな言語の有効なコードのみを実行できます。 SQL コードを処理する場合、次のロジックを使用してステートメントによってステートメントが実行されます: read/process/print result. SQL 以外のコードを処理する場合は、入力ソースから完全にロードされ、ユニットとして実行されます。 --interactive (または -i) コマンドラインオプションを使用して、対話モードで発行されているかのように入力ソースを処理するように MySQL Shell を構成します。これにより、対話モードで提供されるすべての機能をバッチ処理で使用できます。

注記

この場合、ソースは行単位で読み取られ、対話型パイプラインを使用して処理されます。

入力は、MySQL Shell で選択された現在のプログラミング言語 (デフォルトは JavaScript) に基づいて処理されます。 defaultMode MySQL Shell 構成オプションを使用して、デフォルトのプログラミング言語を変更できます。 拡張子が .js.py および .sql のファイルは、デフォルトのプログラミング言語に関係なく、常に適切な言語モードで処理されます。

この例では、バッチ処理のためにファイルから JavaScript コードをロードする方法を示します:

shell> mysqlsh --file code.js

ここでは、JavaScript ファイルが標準入力にリダイレクトされて実行されます:

shell> mysqlsh < code.js

次の例では、実行のために SQL コードを標準入力にリダイレクトする方法を示します:

shell> echo "show databases;" | mysqlsh --sql --uri user@192.0.2.20:33060

MySQL Shell 8.0.22 から、--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 実行

X プロトコル セッションに対する SQL クエリーの実行では、通常、sql() 関数が使用されます。この関数は、SQL ステートメントを文字列として取り、クエリーのバインドと実行に使用する SqlExecute オブジェクトを返し、結果を返します。 この方法は、Using SQL with Session で説明されています。 ただし、クラシック MySQL プロトコル セッションに対する SQL クエリーの実行では、runSql() 関数を使用します。この関数は、SQL ステートメントとそのパラメータを取得し、指定されたパラメータを指定されたクエリーにバインドし、クエリーを単一のステップで実行して結果を返します。

MySQL サーバーへの接続に使用されるプロトコルに依存しない MySQL Shell スクリプトを作成する必要がある場合、MySQL Shell には X プロトコル 用の session.runSql() 関数が用意されており、クラシック MySQL プロトコル セッションの runSql() 関数と同様に機能します。 この関数は、sql() のかわりに MySQL Shell でのみ使用できるため、スクリプトは X プロトコル セッションまたは クラシック MySQL プロトコル セッションのいずれかで動作します。 Session.runSql() は、クラシック MySQL プロトコル 関数によって返される ClassicResult オブジェクトの仕様に一致する SqlResult オブジェクトを返すため、結果は同じ方法で処理できます。

注記

Session.runSql() は、JavaScript および Python の MySQL Shell X DevAPI 実装専用であり、標準 X DevAPI の一部ではありません。

クエリー結果を参照するには、クラシック MySQL プロトコル と X プロトコル の両方で機能する fetchOneObject() 関数を使用できます。 この関数は、次の結果をスクリプトオブジェクトとして返します。 カラム名はディクショナリ内のキーとして (有効な識別子の場合はオブジェクト属性として) 使用され、行値はディクショナリ内の属性値として使用されます。 オブジェクトに対して行われた更新は、データベースで永続化されません。

たとえば、MySQL Shell スクリプトの次のコードは、X プロトコル セッションまたは クラシック MySQL プロトコル セッションと連携して、特定の国から市区町村の名前を取得および出力します:

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