Используйте регулярные выражения для извлечения имен таблиц из SQL - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно мнение о разборе SQL (Oracle) с регулярным выражением.

В StackOverflow есть довольно занимательные посты, в которых объясняется, что регулярные выражения в HTML или XML бесперспективны ( пример ).

Так ли это и с SQL? И даже если ответ «нет», можно ли решить приведенную ниже конкретную проблему с помощью регулярных выражений? Последний запасной вариант, что еще будет работать?

Требование: убедитесь, что имена таблиц в произвольном SQL заключены в квадратные скобки (должно быть "[имя]").

Ограничение: используйте ksh / bash, то есть grep | sed | awk.

Для SQL ниже скрипт должен пометить bad_table как не соответствующий (должен был быть [bad_table]). Должен работать на произвольном SQL, здесь более простой без объединений.

SELECT id
FROM [order]
WHERE id IN (SELECT oid
             FROM [audit] a, bad_table d, (SELECT xid FROM [t1]) r
             WHERE a.data = r.data and a.data = d.data)

1 Ответ

0 голосов
/ 18 сентября 2018

Я прочитал больше, и теперь стало ясно, что задача невозможна с регулярным выражением.Теория говорит, что - SQL не является регулярным языком, и регулярное выражение не до этой задачи.Требуется синтаксический анализатор SQL.

При этом достигнут компромисс, поскольку на работе нужно что-то делать: использовать коллекцию регулярных выражений (на данный момент 2), которые работают с ~ 300 файлами SQLкоторые нуждаются в обработке на сегодняшний день.Признайте, что однажды кто-то придумает SQL, который потерпит неудачу.Добавьте для этого случая комментарий в коде, который объясняет, почему для его решения необходим твик, и лучше всего использовать синтаксический анализатор SQL ...

Большое спасибо всем, кто внес свой вклад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...