我在这样的数据库包体中有10个以上的包。
package pk_name body
insert into table
(id,
name,
roll_no)
(select
s.id id,
case when s.name in ('ad','gd')
then 'sam'
else 'pam' end name,
s.rid roll_no )
我需要捕获的是select子句
中的列逻辑例如
我需要来自专栏的案例陈述 命名
case when s.name in ('ad','gd')
then 'sam'
else 'pam' end
我需要为所有列执行此操作。
我可以在user_source表中看到我的所有包。
我想过使用正则表达式,但我无法这样做。
如您所见,select子句中的逗号用逗号分隔(我想将它用作分隔符)但是也有可能在case语句中包含逗号。我该如何处理?
答案 0 :(得分:0)
一般情况下,此任务不接受RegExp。您应该处理不常规的SQL DML语法(假设我们已经从包中删除了查询,我不会谈论pl \ sql lang。我相信它可以与PLscope和RegExp一起使用)。所以你必须做出选择:
实现或采用一些完整 SQL语法解析器并执行您想要的操作
采取一些限制任务的假设,并简化SQL语法并制作常规子集。例如,您可以说列表达式不能包含子查询,依此类推。然后你可以使用RegExp。
制作一些简单且更通用的CFG,其中SQL是子集。然后实现简单的CFG解析器(手工或使用工具yacc \ bison)
至于我,我更喜欢第三种情况。但是如果你不熟悉所有这些东西,那么你需要花费11个多小时才能做些什么。