概要
SQLite コマンドラインツールも終了したときに終了コードを出力するので コマンドプロンプトの「%ERRORLEVEL%」やBashの「$?」で確認することができる。 (ちなみに、コマンドプロンプトは「エラーレベル」、Bashは「終了ステータス」など呼び方はいろいろあるらしい。)
コマンドプロンプトの場合
C:\temp>sqlite3 sample.db
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
sqlite> create table product (id, name, quantity);
sqlite> insert into product values (1, 'potato', 100);
sqlite> .exit
C:\temp>echo %ERRORLEVEL%
0
Bash(MacOSX)の場合
Mac-Air:~ user$ sqlite3
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite> create table product (id, name, quantity);
sqlite> insert into product values (1, 'potato', 100);
sqlite> .exit
Mac-Air:~ user$ echo $?
0
終了コードの意味
コマンドラインツールでエラーが一つも発生しなければ 0、エラーが発生したら0以外になると覚えておけばいい。
(公式サイトを探してみたが、コマンドラインツールの終了コードに関する情報は見つからなかった。多分この認識で大丈夫なはず・・・)
C:\temp>sqlite3 sample.db
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
sqlite> select * from not_exist_table;
Error: no such table: not_exist_table
sqlite> .exit
C:\temp>echo %ERRORLEVEL%
1
バッチファイルでの利用例
終了コードを使えば、バッチファイルやシェルスクリプトにコマンドラインツールを組み込んだ時、 エラー処理ができる
以下はsample.dbというデータベースにCSVファイルを取り込むバッチ処理の例。 CSVの取り込みに失敗したら「Error」を表示する。
import.sql
.mode csv
.import data.csv temp_table
.quit
sample.bat
sqlite3 sample.db < import.sql
if not %ERRORLEVEL% == 0 (
echo Error
)
echo Success
exit
「.exit」コマンドを使うことで終了コードを指定することができる。
SQLiteコマンドラインツールを終了させるには「.quit」もしくは「.exit」コマンドを使うが、 「.exit」コマンドの引数に数値を渡すと終了コードを指定できる。 「.quit」コマンドでは指定できない。
C:\temp>sqlite3 sample.db
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .exit 999
C:\temp>echo %ERRORLEVEL%
999
参考URL
-
Command Line Shell For SQLite
公式のコマンドラインツールに関するドキュメント
https://www.sqlite.org/cli.html
-
あさはか備忘録: SQLite3 コマンドラインツールからSQLファイルを読み込んで実行する
https://sfnovicenotes.blogspot.com/2020/10/sqlite3-sql.html - あさはか備忘録: SQLite3 バッチファイルやシェルスクリプトからSQLを実行する https://sfnovicenotes.blogspot.com/2021/03/sqlite-3-sql.html