使用正则表达式解析 Oracle 脚本

Posted

技术标签:

【中文标题】使用正则表达式解析 Oracle 脚本【英文标题】:Oracle Scripts parsing using regex 【发布时间】:2013-10-23 09:12:35 【问题描述】:

我正在尝试解析 oracle 脚本。目的是提取函数、过程、循环、异常等的数量。完成此任务的最合适方法是什么?我目前正在使用正则表达式执行此操作。但它似乎并没有涵盖所有场景。我需要一些替代方案。

【问题讨论】:

【参考方案1】:

我创建了以下正则表达式来找出包、函数、过程、循环、异常、元数据定义和匿名块。

"create\\s+(or\\s+replace\\s+)?(package)\\s+(body\\s+)?([\\w\\.]+)" +//1-4
        "|(\\bcreate\\s+)?(\\bor\\s+)?(\\breplace\\s+)?(\\bfunction|\\bprocedure)\\s+(\\w+)" +//5-9
        "|(\\bexception)\\s" +//10
        "|(\\bcursor)\\s*(\\w+)"+//11-12
        "|(\\bloop)\\s"+//13
        "|(\\w+)\\s*([\\w\\.]+)\\s*%(ROW)?(TYPE);"+//14-17
        "|(\\bdeclare)\\s"//18

该技术是消除 cmets 和字符串文字,然后应用正则表达式。它对我来说很好用。

【讨论】:

【参考方案2】:

这是一个有趣的话题,你可以使用不同的事务长。一种流行的方法是ANTLR.Grammar,因为那里定义了 pl/sql。

你也可以看看This Answer

【讨论】:

这是一个不错的建议,但我们已经在使用 ANTLR 进行 SQL 转换。这只是为了分析目的,我们只需要计算函数、过程、循环、异常等。 ic,那么如果你们还有其他好的选择,请分享,我正在一个有很多 pl/sql 脚本的项目中工作,如果可以的话,有些脚本超过 7000 行所以..那么记录代码会很有帮助

以上是关于使用正则表达式解析 Oracle 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式

在 pig 中使用正则表达式解析日志文件

使用正则表达式在Oracle中按分隔符拆分字符串

正则表达式过滤日志

oracle 正则表达式?=

oracle 正则表达式?=