sql - SQL 文件中的表列表
问题描述
如何获取.sql
包含大量 plsq/匿名块的文件中的所有表?理想的情况是通过数据字典获取它,但这是不可能的,因为它们不在数据库中。
我在想用正则表达式阅读文本:有人有更好的主意吗?
解决方案
除非您可以保证 SQL 采用某种格式以便于挑选表,否则您将需要一个 PLSQL/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
应该让你开始。
但是,一旦你得到更多华丽的布局,你会发现它开始错过一些东西。
推荐阅读
- c# - 在构造函数定义中设置属性
- python - 如何找出“无法腌制 '_io.BufferedReader' 对象”错误
- datastage - 检测通过 RCP 进入的列数
- ios - 是否可以仅显示/描边 UIBezierPath 的一部分?
- python - 无法在 Django 中进行迁移
- django - TruncMinute Celery 任务结果
- c# - 在 C# 窗体中推 EPPlus 无法在 excel 文件中获取自动填充值
- c++ - 为什么我的代码看起来不错,但在 Codechef 比赛中显示了 WA 以及为什么将 N 作为字符串的代码没有给出 WA
- compiler-errors - actix_rt 2.0.2 的“系统未运行”
- php - PHP:将变量设置为 WordPress 函数返回的数组时,是否需要方括号?