2010-08-25 5 views
1

Comme je suis nouveau pour le REGEX je ne suis pas capable de résoudre ci-dessous chose.Regex pour extraire des informations de la requête SQL

Et s'il vous plaît partager quelques liens liés à l'analyseur afin que je puisse l'apprendre.

Je suis confronté à un problème dans la résolution int en dessous de l'instruction SQL. Son plus de ligne ajoutée à l'entrée précédente.

S'il vous plaît, aidez-moi à faire de même.

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; 

SORTIE:

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

Sournois, avec le commentaire là-bas. Pour le SQL réel, il existe des scénarios plus complexes, et vous voulez probablement un analyseur SQL. Quelle langue est-ce, de toute façon? – Kobi

+0

Je suis d'accord avec Kobi, sauf si vous pouvez garantir des requêtes très basiques, vous devriez probablement avoir un analyseur SQL approprié. – Craig

Répondre

1

Voici une solution Perl utilisant l'expression rationnelle:

$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";  
} 

La bonne façon d'analyser SQL est de le faire en utilisant un analyseur et ne pas utiliser regex.

+0

Merci codadict votre solution m'a beaucoup aidé. – vrbilgi

Questions connexes