本文へ移動
Develop Tools
← 使い方ガイドへ戻る

SQLの構文エラーをチェックする方法|行・列から原因を探す

SQLのError位置は、原因のTokenではなくParserが解釈を続けられなくなった場所を示すことがあります。まず括弧、String Literal、Quoted Identifier、Block Commentを確認し、その後にDatabase固有のGrammarを調べます。

SQL構文エラーの表示位置から未終了の引用符まで戻って確認する図
SQL構文エラーの表示位置から未終了の引用符まで戻って確認する図

SQLをブラウザ内で整形・構文チェックする

Databaseへ接続せず、6種類の方言から選んでSQLを整形・圧縮し、括弧・引用符・コメントの基本的な問題を確認できます。

SQL整形・圧縮・構文チェックツールを開く

結論:最初の構造Errorを一つずつ直し、対象DBで再解析する

複数Errorが表示されても、最初の未終了Quoteや括弧を直すと後続Errorがまとめて消える場合があります。行・列と周辺抜粋を起点に、一つ前の開始Tokenまで戻ります。

整形前後で文字列、引用識別子、コメント、Placeholder、演算子、文の区切りが変わっていないか確認します。

FormatterはSQLを自動修復せず、Database固有の完全な構文検証や実行結果の保証も行いません。

原因と判断基準:表示位置と根本原因を分ける

Quoteが閉じていないと後続KeywordもStringとして扱われ、最後の行でErrorになることがあります。括弧も同様に、余分な閉じ括弧と不足した閉じ括弧を区別します。

簡易Checkで見つからないKeyword順、型、Function Argument、Clause固有ErrorはDatabaseのError Messageと公式Grammarで確認します。

確認対象見るポイント判断後の対応
括弧()のDepthと余分な閉じ対応位置を確認
String'...'の終端と'' EscapeLiteralを保ったまま修正
Identifier""・``・[]方言を選択
Comment--・/* */の終端後続SQLの取込範囲を確認

整形後に確認するチェックリスト

  • 対象DatabaseとVersion
  • 文字列・識別子の引用符
  • コメントとHintの保持
  • 括弧・Statement区切り・Placeholder
  • 対象DBまたはCIでの再検証

DevelopToolsのSQL Formatterで確認できること

SQL FormatterはSQLを実行せず、Tokenへ分解して文字列、引用識別子、コメントを保護しながら句と括弧の深さに合わせて整形します。ANSI SQL、Oracle、PostgreSQL、MySQL・MariaDB、SQL Server、SQLiteを選択でき、貼り付けと.sqlファイルの読込はブラウザ内だけで処理します。

項目現行ツールの対応
処理整形、1行圧縮、括弧・引用符・コメントの簡易構文チェック
整形設定2・4スペース・タブ、予約語の大文字・小文字、行頭・行末カンマ、AND・OR改行
保持設定コメント、空行、末尾改行。改行コードはLF・CRLFから選択
方言保護PostgreSQLドル引用符、Oracle代替引用符、MySQLバッククォート、SQL Server角括弧識別子
診断括弧、引用符、コメントの未終了、行・列・周辺抜粋、文数・Parameter数・最大括弧深度
未対応DB接続、SQL実行、Schema・型・権限・実行計画・全方言構文の完全検証

整形・簡易構文チェック・DB実行を分けて考える

整形はToken間の空白と改行を読みやすくする処理です。簡易構文チェックは括弧、文字列、引用識別子、コメントなどが閉じているかを確認します。どちらも、テーブルやカラムの存在、Data Type、権限、Constraint、Stored Procedure全体、実行計画までは検証しません。

本番で使うSQLは、整形後の差分を確認したうえで対象DBのParser、Test Database、Migration Tool、CIのLinterなどへ渡します。見た目が整ったことと、安全かつ正しく実行できることを同じ判定にしないでください。

DevelopToolsはSQLをDatabaseへ送信・実行しません。「構文エラーなし」は対象DBでの実行成功を保証しません。

SQLを安全に整形して確認する共通手順

  1. 元SQLを複製し、Password、Token、顧客情報、接続先、実データをテスト値へ置き換えます。
  2. Oracle、PostgreSQL、MySQL・MariaDB、SQL Server、SQLite、ANSI SQLから対象方言を選びます。
  3. 最初に構文チェックを実行し、未終了の括弧、引用符、コメントと表示された行・列を確認します。
  4. 整形設定を一項目ずつ選び、文字列・コメント・Placeholderが変わっていないか差分を確認します。
  5. 整形結果を別名で保存し、対象DBの公式Parser、Test環境、Migration ToolまたはCIで再検証します。
  6. 実行前にJOIN条件、WHERE条件、Transaction範囲、更新・削除対象件数、実行計画を確認します。

UPDATEやDELETEは整形しても安全にはなりません。WHERE条件とTransaction、Backup、権限を別途確認します。

機密情報と大きなSQLを扱うときの注意点

貼り付け、ファイル読込、整形、圧縮、簡易構文チェック、コピー、保存はブラウザ内で完結します。LocalStorageへ保存するのは方言、インデント、Theme、Font、Editor Sizeなどの設定で、入力SQL本文や処理結果ではありません。

SQLにはSchema名、Table名、顧客ID、Email、Access Token、接続先、運用Commentなどが含まれます。ブラウザ内処理でも、画面共有、Clipboard履歴、Download先、Browser Extensionからの漏えいを考慮し、共有前はMasking Toolで置き換えます。

50万文字を超える入力では構文色分けを省略します。処理可能なSizeは端末とBrowserの空きMemoryに依存するため、巨大DumpはStatementやMigration単位へ分割します。

DB公式資料で方言と字句規則を確認する

SQLはデータベースごとに予約語、識別子の引用符、文字列、コメント、文の区切りが異なります。整形結果だけで実行可否を判断せず、利用中のDBとVersionに対応する公式資料を確認します。

具体例:閉じQuote不足で末尾にErrorが出るSQL

SELECT * FROM users WHERE status = 'OPEN AND created_at >= CURRENT_DATE; のようにStringが閉じていない例です。

元SQLを直接上書きせず、構文チェックと整形を分けて実行します。出力を文字列Diffで比較し、実行前に対象DBのTest環境でも確認します。

  1. SQLを貼り付けるか、.sqlファイルを1件読み込みます。
  2. 対象Databaseを選び、最初に構文チェックを実行します。
  3. Error行だけでなくstatusのLiteral開始まで戻り、正しい値の末尾へQuoteを追加して再チェックします。
  4. 整形結果と元SQLを比較し、Literal、Identifier、Comment、Parameterが同じことを確認します。
  5. 対象DBのParserまたはTest環境で構文と実行結果を検証します。

値を推測して自動補完せず、仕様またはParameter Binding元から正しいLiteralを確認します。

よくある質問

入力したSQLはDatabaseやサーバーへ送信されますか?
送信されません。SQLの読込、整形、圧縮、簡易構文チェック、コピー、保存はブラウザ内で処理し、Databaseへ接続・実行しません。
構文チェックが成功すれば、そのまま本番で実行できますか?
保証されません。括弧、引用符、コメントなどの基本的なToken構造を確認する機能で、Schema、型、権限、方言の完全なGrammar、実行計画、更新対象は対象DBで確認が必要です。