首页 > 解决方案 > SQL 文件中的表列表

问题描述

如何获取.sql包含大量 plsq/匿名块的文件中的所有表?理想的情况是通过数据字典获取它,但这是不可能的,因为它们不在数据库中。

我在想用正则表达式阅读文本:有人有更好的主意吗?

标签: sqloracleplsqlregexp-replaceregexp-substr

解决方案


除非您可以保证 SQL 采用某种格式以便于挑选表,否则您将需要一个 PLSQL/SQL 词法分析器。

有关详细信息,请参阅此:

在哪里可以找到 PL/SQL 编程语言的官方语法?

为了说明我的观点,举个例子:

SELECT a, b
FROM tabA, tabB
WHERE x = y;

如果你会工作grep 'FROM[:space:]' | cut -d' ' -f2

但是,如果你有:

SELECT a, b
FROM tabA,
     tabB
WHERE c IN ( SELECT x
             FROM tabC,
                  tabD
.
.

然后事情变得棘手,你需要 Lex/Yacc 类型的语法分析器。

UPDATE、INSERT、DELETE 应该相当简单:

egrep '(UPDATE|INSERT|DELETE)[:space:]' src.sql | cut -d' ' -f2

应该让你开始。

但是,一旦你得到更多华丽的布局,你会发现它开始错过一些东西。


推荐阅读