VBA: проверка кода SQL

Можно ли проверить код SQL на правильность синтаксиса с помощью VBA?

В моем сценарии пользователь вводит оператор SQL в текстовое поле пользовательской формы. Сначала я хотел бы проверить, является ли оператор SQL правильным с точки зрения синтаксиса, а во-вторых, проверить, является ли это оператором SELECT.

Что должна проверять проверка

  • Правильно ли написаны ключевые слова SQL (которые можно использовать в инструкции SELECT)
  • Порядок ключевых слов SQL
  • Это утверждение является оператором SELECT

Подведение итогов комментариев

  • СУБД - это Oracle
  • Лист Excel не связан с базой данных Oracle.
  • Лист Excel будет загружен в систему, а затем коды SQL будут выполнены в базе данных.
  • Мне известно о возможности SQL-инъекции.
  • Предоставленный оператор SQL должен быть проверен на правильность синтаксиса. Имена столбцов не проверяются, так как структура базы данных неизвестна.

person blckbird    schedule 30.11.2015    source источник
comment
В SQL Server (пожалуйста, отметьте фактическую СУБД - Oracle, MySQL, ???) вы можете выдать SET NOEXEC ON, запустить его и отловить любую ошибку   -  person Nick.McDermaid    schedule 30.11.2015
comment
Спасибо за упоминание. Это СУБД Oracle. У меня нет подключения к базе данных.   -  person blckbird    schedule 30.11.2015
comment
Вот один способ, который я придумал после 2 минут поиска. Это намного сложнее, чем SQL Server. stackoverflow.com/questions/20745010/. Я должен предостеречь вас от этого. Пользователь может ввести DROP TABLE schema.table, и он сбросит таблицу. Или они могут выполнить перекрестное соединение, из-за которого на сервере заканчивается временное пространство.   -  person Nick.McDermaid    schedule 30.11.2015
comment
Дело в том, что это все равно выдаст ошибку. Зачем сначала это проверять?   -  person Nick.McDermaid    schedule 30.11.2015
comment
Потому что будет несколько операторов, и я хочу предварительно проверить их, прежде чем они будут выполнены.   -  person blckbird    schedule 30.11.2015
comment
Little Bobby Tables наблюдает за вами. Как говорит Nick.McDermaid, это похоже на открытое приглашение к SQL-инъекции   -  person kevinskio    schedule 30.11.2015
comment
Да, и я это осознаю. Тем не менее, я все еще хочу проверить, является ли предоставленное утверждение правильным с точки зрения синтаксиса.   -  person blckbird    schedule 30.11.2015
comment
@ Nick.McDermaid - вставьте это как полный ответ: это и правильно, и полезно. Нам понадобится Oracle Dev, который расскажет нам, где эквивалент NOEXEC существует в PL-SQL - и они известны тем, что отвечают на вопросы только в том случае, если вы предоставляете точно правильную формулировку, что вроде бы опровергает суть здесь - но главное Ответ заключается в том, что вы заставляете РСУБД анализировать SQL, а не пытаетесь сделать это самостоятельно: и это, в свою очередь, может познакомить неопытного кодировщика с очень важным принципом программирования: НИКОГДА, НИКОГДА НЕ НАПИСЫВАЙТЕ ПАРСЕР, ЧТОБЫ СДЕЛАТЬ РАБОТУ, КОТОРАЯ СУЩЕСТВУЮЩИЙ ПАРСЕР МОЖЕТ СДЕЛАТЬ.   -  person Nigel Heffernan    schedule 30.11.2015
comment
Ищу решение в excel vba. У меня нет подключения к базе данных.   -  person blckbird    schedule 30.11.2015
comment
Что вы собираетесь делать с SQL после проверки его внешним валидатором, если у вас нет БД?   -  person Nick.McDermaid    schedule 01.12.2015
comment
Он будет загружен в систему базы данных, а затем будут выполнены операторы sql. Это причина, по которой я хотел бы проинформировать пользователя перед этой загрузкой, правильный SQL или нет.   -  person blckbird    schedule 01.12.2015
comment
Это странная задача, но другие высказали свои сомнения, поэтому мне не нужно их повторять, даже если я разделяю их. Я думаю, что, по крайней мере, я бы создал фиктивную базу данных со всеми соответствующими таблицами и полями и запустил текст SQL для этого. Если команда вызвала ошибку, вы могли бы ее поймать и вернуть False. Я мог бы даже сделать подсчет таблиц и строк, чтобы предупредить об удалении или отбрасывании. Если вы действительно хотите проанализировать и выделить источник синтаксической ошибки в VBA, возможно, прислушайтесь к приведенному выше совету.   -  person Ambie    schedule 01.12.2015
comment
Если у вас нет схемы базы данных, в которую вы загружаете, тогда у вас может быть орфографическая ошибка или отсутствующий столбец в выбранном вами столбце, и это не удастся. Невозможно проверить это извне без актуальной схемы.   -  person Nick.McDermaid    schedule 02.12.2015
comment
Понятно. Кроме того, некоторая проверка все равно может быть проведена.   -  person blckbird    schedule 02.12.2015
comment
Я не думаю, что смогу помочь, но удачи   -  person Nick.McDermaid    schedule 03.12.2015
comment
Это старый, но если вы могли бы клонировать схему БД (не обязательно все / любые данные) один раз в день / неделю на сервер / место, к которому у вас есть доступ, вы могли бы создать соединение с этим, бросить несколько запросов на нем и создать таким образом некоторые ошибки. Просто мысль.   -  person mountainclimber11    schedule 31.01.2017