$2 が抜けた INSERT
列を削ったときに番号を詰め忘れて、VALUES が $1, $3, $4 になってしまった例です。最大番号と使われている番号の数がずれる欠番を見つけます。
入力
SQL
INSERT INTO items (a, b, c) VALUES ($1, $3, $4)
数える書き方
$1, $2…(PostgreSQL の位置パラメータ)だけ
実際に渡す値の個数(任意)
(空)
結果
エラー 0 件・警告 1 件・情報 0 件
指摘(エラー・警告・情報)
- 警告 全体 最大番号は $4 ですが、$2 が使われていません(欠番)。番号を詰めるか、渡す値の個数を最大番号に合わせて確認してください(PREPARE では $1, $2… と位置で参照します)。
| 最大番号 | $4 |
|---|---|
| 使われている番号の数 | 3 個 |
| 欠番 | $2 |
プレースホルダの一覧
| プレースホルダ | 出現回数 | 行 |
|---|---|---|
| $1 | 1 | 1 行目 |
| $3 | 1 | 1 行目 |
| $4 | 1 | 1 行目 |
検算(この結果になる理由)
使われている番号は $1・$3・$4 の 3 個で、最大番号は $4 です。$1 から $4 の間で $2 だけが使われていないので欠番として警告が 1 件出ます。渡す値の個数は未入力のため、その確認は行いません。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 型の推論(PREPARE の型リストと実際の値の型の対応)は判定しません。番号と個数を数えるだけです。
- 完全な SQL の構文解析はしません。関数本体の $1 など、文脈で意味が変わる使い方は字句のとおりに数えます。
- ? と :名前 は PostgreSQL 自体の記法ではなく、ドライバーなどの別の層の書き方です。数えるのは見つけた個数だけで、仕様の根拠はありません。
- 貼り付けた SQL の実行や、DB への接続はできません。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のクエリが正しく実行できることを保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。