我想使用antlr更改DBMS_LOB.substr: 范例1: 输入:
DBMS_LOB.SUBSTR(field_name1, 4000, 1)
输出:
SUBSTR(field_name1, 1, 4000)
我们需要做两件事: 1)删除DBMS_LOB。 2)交换第二个和第三个参数
我可以覆盖特定令牌的规则,并对其进行更改以处理上述问题。
处理递归的问题: 我有这样的输入:
DBMS_LOB.SUBSTR(field_name1, DBMS_LOB.SUBSTR(field_name2, 6000, 1), DBMS_LOB.SUBSTR(field_name3, 8000, 1))
我想更改以下内容:
SUBSTR(field_name1, SUBSTR(field_name3, 1, 8000), SUBSTR(field_name2, 1, 6000))
当原始语句中DBMS_LOB.SUBSTR出现多个级别时,如何处理。
任何帮助将不胜感激。
答案 0 :(得分:0)
在不知道实现该任务的方法的情况下很难说出来。
但通常,建议可能如下所示:
将内部DBMS_LOB.SUBSTR语句视为单个非终止语句。
我的意思是,在处理任何一种算法时,替换算法都应该没有区别
“ DBMS_LOB.SUBSTR(field_name1,4000,1)”
或
“ DBMS_LOB.SUBSTR(field_name1,DBMS_LOB.SUBSTR(field_name2,6000,1),DBMS_LOB.SUBSTR(field_name3,8000,1))”。
在两种情况下, 4000 和 DBMS_LOB.SUBSTR(field_name2,6000,1)都是参数,无论它们是什么样子组成。