2010-08-25 4 views
1

Поскольку я новичок в REGEX, я не могу решить эту проблему.Regex для извлечения информации из SQL-запроса

И, пожалуйста, поделитесь ссылками, связанными с парсером, чтобы я мог его изучить.

Я столкнулся с проблемой при решении int ниже инструкции SQL. Его новая строка добавлена ​​к предыдущему INPUT.

Пожалуйста, помогите мне в этом.

DECLARE 
numerator NUMBER; 
BEGIN 
SELECT x, y INTO numerator, denominator FROM result_table, s_Table 
WHERE sample_id = 8; 
the_ratio := numerator/denominator; 
IF the_ratio > lower_limit THEN 
INSERT INTO 
ratio VALUES (table, coloum); 
ELSE 
INSERT INTO onemoreTable VALUES (table, -1); 
END IF; 
COMMIT; 
delete from  --some comment 
xyz where id=17; 
EXCEPTION 
WHEN ZERO_DIVIDE THEN 
INSERT INTO ratio VALUES (table, 0); 
COMMIT; 
WHEN OTHERS THEN 
ROLLBACK; 
END; 

ВЫВОД:

SELECT from: result_table, s_Table 
INSERT into: ratio 
INSERT into: onemoreTable 
DELETE from: xyz 
INSERT into: ratio 
+2

Sneaky, с комментарием. Для реального SQL существуют более сложные сценарии, и вам, вероятно, нужен парсер SQL. На каком языке это вообще? – Kobi

+0

Я согласен с Kobi, если вы не можете гарантировать очень простые запросы, вероятно, вам лучше всего получить правильный синтаксический анализатор SQL. – Craig

ответ

1

Вот Perl на основе решения с использованием регулярных выражений:

$input =~s/--.*?\n//g; # delete the comments. 
$input =~s/\s+/ /g; # replace multiple white space with single space. 
while($input=~m/((?:insert into)|(?:delete from)) (\w+)/ig) { 
     print "$1 : $2\n";  
} 

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

+0

Спасибо, кодадикт, ваше решение очень помогло мне. – vrbilgi

 Смежные вопросы

  • Нет связанных вопросов^_^