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