perl regex从存储过程中提取表名

时间:2013-12-03 09:38:27

标签: regex perl

我需要从存储过程中提取表名列表,例如SP可能包含一个或多个SQL。

select
t.ticket, t.subsid, null, null
from
    Trans t
where
    subsid = @subsid

select *
from
   Trans t, Cpty c, Book b
where
t.ticket            =  c.ticket

现在我需要提取Trans,Cpty和Book作为表名。 sqls是多行的,如何在perl正则表达式中提取这些信息。

请帮忙。

1 个答案:

答案 0 :(得分:0)

use strict; use warnings;
open my $f, "<", 'input' or die("$!");
my %tables;
while (<$f>) {
    next if !/\bfrom\b/;
    while (<$f>) {
        $tables{$_} = 1 for map { (split)[0] } split(/,/);
        last if !/,\s*$/
    }   
}
close $f; 
print join(",", keys %tables), "\n";

产地:

Book,Cpty,Trans