我正在寻找一种在Oracle中以某种方式导出或可视化任意PL/SQL对象的解析树的方法,以便在两个类似对象的解析树之间进行比较。这可能吗?
理论上这应该是可能的(并且需要大量的时间来实现!):
PL/SQL以树状结构PLUS m-code的形式被解析并存储在DB中。该结构是DIANA加IDL的某种变体,而IDL又是Ada用来存储解析结果的东西(PL/SQL与Ada非常相似)。参考参见http://download.oracle.com/docs/cd/B14117_01/appdev.101/b10807/e_limits.htm和http://cs.felk.cvut.cz/10gr2/appdev.102/b14261/tuning.htm
另一个选择是构建自己的解析器——起点是http://it.toolbox.com/blogs/oracle-guide/building-a-plsql-code-parser-using-plsql-part-1-29704
一个非常有用的资源是http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Finnigan.pdf -你会发现很多关于如何从Oracle数据库中提取DIANA-/idl信息的信息,这应该有助于你实现你的目标。