|
|
1
2
也许您可以使用它,它将select语句更改为XML块:
请参见这里: http://forums.oracle.com/forums/thread.jspa?messageID=3693276� 现在只需要分析这个XML块。 Eddi1:
遗憾的是,我不完全理解OP的需求,但我希望这能有所帮助(这是询问例如查询的列的“名称”的另一种方式)
(有关详细信息,请参阅此处: http://www.psoug.org/reference/dbms_sql.html )
OP还希望能够更改查询中表的架构名称。我认为最简单的说法是从
|
|
2
1
如果SQL语句字符串的源代码是其他编码程序,那么您可以简单地坚持认为需要更改的部分只使用特殊的转义约定进行标记,例如,编写$table而不是表名,或者在需要时编写$tableprefix。然后找到需要修补的地方可以通过子字符串搜索和替换来完成。 如果您真的有任意的SQL字符串,并且不能很好地标记它们,那么您需要像您观察到的那样,以某种方式解析SQL字符串。XML解决方案当然是一种可能的方法。 另一种方法是使用 program transformation system . 这种工具可以为语言实例解析一个字符串,构建ASTS,对ASTS进行分析和转换,然后输出一个修改后的字符串。 这个 DMS Software Reengineering Toolkit 就是这样一个系统。它有PLSQL前端分析器。它可以使用模式导向的转换来完成您似乎需要的重写。对于涉及选择项的示例:
要阅读这条规则,您需要了解引号内的内容表示我们想要操纵的某台计算机语言中的抽象树。“域plsql”短语的意思是“使用plsql解析器”来处理引用的字符串内容,这就是它所知道的。(DMS有很多语言解析器可供选择)。术语 “expression”和“select_item”是来自感兴趣的语言的语法结构,例如在本例中的plsql。请参阅PLSQL参考手册中的铁路图。 反斜杠表示转义/元信息,而不是目标语言语法。 规则所说的是,转换那些被解析的元素 选择项 S 仅由一个 表达 \ E ,将其转换为 选择项 由相同的表达式组成 e 以及相应的列( \列(e) )可能基于特定表的选择项列表中的位置。你必须执行 柱 函数,可以从所选项目的位置确定相应的名称。在本例中,我选择定义column函数以接受感兴趣的表达式作为参数;该表达式实际上作为匹配的树传递,因此column函数可以确定它在 选择项 通过浏览抽象语法树列出。 此规则只处理选定项。您将添加更多的规则来处理您感兴趣的其他各种情况。 转换系统为您做的是:
虽然写规则并不总是琐碎的,但如果你的问题是必要的 表示为构成。 XML建议的解决方案是构建此类AST的另一种方法。它没有很好的模式匹配属性,尽管您可以从XSLT中获得很多。我不知道的是XML是否有完整详细的解析树;如果您想进行任意的分析和转换,DMS解析器会根据需要通过设计来提供这一点。 |
|
|
Toru · Oracle文本包含和技术内容 8 年前 |
|
|
Patrick Collins · 如何对Alex代码进行单元测试? 11 年前 |
|
|
user2408664 · 词汇和语法错误 13 年前 |