概要
SQLite3のコマンドラインツールを使用している際、
一連の処理でエラーになった場合、
.bailコマンドを設定しておくことで
その後の処理をキャンすることができる。
SQLiteコマンドラインツールを起動する際に
-bailオプションを指定することでも
同様の効果を得ることができる。
これにより、連鎖的にエラーが発生したり、意味のない処理が動くことを止めることができる。
構文
コマンドラインツール起動中にBail機能をON/OFF にする。(デフォルトはOFF)
.bail on
.bail off
コマンドライン起動時にBail機能をON/OFF にする。(デフォルトはOFF)
c:\temp> sqlite3 -bail on
c:\temp> sqlite3 -bail off
実行例
環境
- Windows 10 64bit
- SQLite Command-Line Shell ver 3.50.2
.bailはCLIでコマンドを手入力する作業ではあまり恩恵がない。(と思う)
外部のSQLファイルを読み込んだり、シェルのコマンドラインからSQLを渡したときに効果を発揮する。
.bailがOFFのままの場合
以下のようなSQLファイルを準備する。
sample_01.sql
-- # 1
.bail off
-- # 2
create table user_01 (id, name);
create tbl user_02 (id, name);
create table user_03 (id, name);
-
bailをOFFにする -
create table文を3つ実行する。
ただし、2つ目のSQL構文に誤りがあるのでエラーになるようになっている。
準備したSQLファイルをSQLite3のコマンドラインツールから読み込んで テーブル一覧を表示してみる。
.read ./sample_01.sql
.tables
実行結果
sqlite> .read ./sample.sql
Parse error near line 6: near "tbl": syntax error
create tbl user_02 (id, name);
^--- error here
sqlite> .tables
user_01 user_03
2つ目のSQLが失敗し、エラーになっている。 1つ目のSQLと3つ目のSQLは成功し、 テーブルが2つ作成されていることがわかる。
.bailをONにした場合
以下のようなSQLファイルを準備する。
sample_02.sql
-- # 1
.bail on
-- # 2
create table user_01 (id, name);
create tbl user_02 (id, name);
create table user_03 (id, name);
-
bailをONにする -
create table文を3つ実行する。
2つ目のSQL構文に誤りがあるのでエラーになるようになっている。 - テーブル一覧を表示する
準備したSQLファイルをSQLite3のコマンドラインツールから読み込む。
.read ./sample_02.sql
.tables
実行結果
sqlite> .read ./sample02.sql
Parse error near line 6: near "tbl": syntax error
create tbl user_02 (id, name);
^--- error here
sqlite> .tables
user_01
2つ目のSQLが失敗し、.tablesを実行すると、
user_03テーブルが作成されていないことがわかる。
よって2つ目でSQLが失敗した後、以降のSQLやコマンドはキャンセルされていることがわかる。
コマンドラインツールで手で入力する場合
以下のような実行の仕方では bailは意味がない。
sqlite> .bail on
sqlite> create table user_01 (id, name);
sqlite> create tbl user_02 (id, name);
Parse error: near "tbl": syntax error
create tbl user_02 (id, name);
^--- error here
sqlite> create table user_03 (id, name);
sqlite> .tables
user_01 user_03
以下のように一度に複数のSQLを実行する場合であれば、 途中で発生したエラー以降はキャンセルされる。
sqlite> .bail on
sqlite> create table user_01 (id, name); create tbl user_02 (id, name); create table user_03 (id, name);
Parse error: near "tbl": syntax error
create tbl user_02 (id, name); create table user_03 (id, name);
^--- error here
sqlite> .tables
user_01
参考URL
-
Command Line Shell For SQLite
公式のコマンドラインツールに関するドキュメント
https://www.sqlite.org/cli.html