私はANTLR
文法を書くのが初めてです。私の要件は、挿入/更新/削除SQL
クエリを解析して、どのテーブルが更新/挿入/削除されているか、列とその値のリストなどの詳細を取得することです。はい、の優れたドキュメントがありますANTLR
が、誰かが私を助けることができればクエリ解析のための特定の文法なら、それは大きな助けになるでしょう。
2 に答える
Wiki にはさまざまな SQL 文法があります: http://www.antlr.org/grammar/list
ただし注意してください: それらは ANTLR ユーザーによって提供されたものであり、適切にテストされていないか、バグが含まれている可能性があります。
しかし、なぜ自分で SQL パーサーを生成するのでしょうか? 既存の SQL パーサーを使用する方がおそらく簡単でしょう。「SQL パーサー Java」で検索するだけで (Java を使用していると仮定して)、多数のヒットが得られるはずです。
「適切な」SQL パーサーを実装することは、実際にはかなり困難です。SQL では、あらゆる種類の複雑なステートメント (ネストされた結合など) を書くことができ、人々は実際にこれを行うため、「完全な」言語を実装する必要があります。(数十ページをカバーする SQL クエリを見たことがあります。ばかげていますが、そうですが、遭遇したものに対処する必要があります)。
かなり包括的なSQL2011 (標準)を確認することをお勧めします。ただし、その文法は ANTLR に適していない可能性があるため、かなりの作業に備えてください。
標準 SQL に対するデータベース/ベンダー固有の拡張機能についても心配する必要があります。PL/SQL (SQL サブ言語部分のみ) には、Oracle 固有の拡張機能が多数含まれています。PL/SQL ストアド プロシージャに直面していて、そのテーブル/列のトレースを実行したい場合は、PL/SQL のプロシージャ部分も実行する必要がある場合がありますが、これもかなり大きなものです。