SQLite3構文 expression(パラメータ)
SQL文内で使える変数。sqlite_bind()関数でセットする。今回は.param set Key Value
で使う。
成果物
パラメータ
書式 | 意味 |
---|---|
?NNN |
NNN には1 〜SQLITE_MAX_VARIABLE_NUMBER (デフォルトは999 )の数値をセットする。その位置 |
? |
非推奨。?NNN 推奨。他のDBMSとの互換性のためにある。 |
:AAA |
名前付きパラメータ。?NNN 同様、番号が振られる。混乱をさけるため併用すべきでない。 |
@AAA |
パラメータの名前が@AAA である。他は:AAA と同様。 |
$AAA |
Tcl言語における変数名の形式。1つ以上の:: と接尾辞(...) を含めることができる。 |
- 値が割り当てられていないパラメータは
NULL
になる - sqlite3_bind_parameter_index()関数でパラメータのインデックスを返す
一覧
?NNN
?1
に値A
をセット。
.param init .param set ?1 A
?1
をSQL文にセット。
select 'A' = ?1;
1
select 'B' = ?1;
0
?1
の値を変更。
.param set ?1 B
select 'B' = ?1;
1
未作成のパラメータが使われたらNULL
になる。
select 'B' = ?2;
.param list
?1 'B'
:AAA
:query
に値A
をセット。
.param init
.param set :query A
select 'A' = :query;
1
select 'B' = :query;
0
.param set :query B
select 'B' = :query;
1
@AAA
@query
に値A
をセット。
.param init
.param set @query A
select 'A' = @query;
1
select 'B' = @query;
0
.param set @query B
select 'B' = @query;
1
$AAA
$query
に値A
をセット。
.param init
.param set $query A
select 'A' = $query;
1
select 'B' = $query;
0
Tcl形式の連想配列。
.param init .param set $human(name) Yamada .param set $human(age) 20
select $human(name); select $human(age);
Yamada 20
名前空間。
.param init .param set $human::name Yamada .param set $human::age 20
select $human::name; select $human::age;
Yamada 20
名前空間なら2つ以上の階層もOK。
.param init .param set $sys::human::name Yamada .param set $sys::human::age 20
select $sys::human::name; select $sys::human::age;
Yamada 20
.param init .param set $sys::human(name) Yamada .param set $sys::human(age) 20
select $sys::human(name); select $sys::human(age);
Yamada 20
以下は未定義のためNULL
。
select $sys::human;
::
の代わりに.
を使おうとしたがダメ。
.param init .param set $sys.human(name) Yamada .param set $sys.human(age) 20
select $sys.human(name); select $sys.human(age);
Error: near ".": syntax error Error: near ".": syntax error
連想配列のキー名に.
が使える。
.param init .param set $ns::sys(human.name) Yamada .param set $ns::sys(human.age) 20
select $ns::sys(human.name); select $ns::sys(human.age);
Yamada 20
だが、親子関係はない。完全一致するキー名としてのみ使える。よって以下のようにすると、未定義キーなのでNULL
が返される。[name,age]
とか['Yamada',20]
などが返されることはない。
select $ns::sys(human);
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)
- SQLite3でTEMPの保存先を指定する
- SQLite3構文 delete
- SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3構文 delete(limit offset, order by)
- SQLite3クエリプランニング(インデックスの働き)
- SQLite3構文 explain
- SQLite構文 expression
- SQLite構文 expression(リテラル)
- SQLite構文 expression(演算子)
- SQLite構文 expression(in 句)