繁体   English   中英

如何从Oracle PL SQL中的包主体内的select语句捕获特定列

[英]How to capture particular column from select statement inside a package body in oracle pl sql

这样的数据库包主体中有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子句中的列逻辑

例如

我需要NAME列中的案例声明。

case when s.name in ('ad','gd') 
then 'sam'
else 'pam' end 

我需要对所有列都这样做。

我可以在user_source表中看到所有软件包。

我考虑过使用正则表达式,但无法这样做。

如您所见,select子句中的列由逗号分隔(我想到了将其用作分隔符),但是逗号也可能出现在case语句中。 我该如何应对?

通常,RegExp对于此任务是不可接受的。 您应该处理非常规的SQL DML语法(假设我们已经从软件包中删减了查询,我并不是在谈论pl \\ sql lang。我相信可以使用PLscope和RegExp来完成)。 因此,您必须做出选择:

  1. 实现或采用一些完整的 SQL语法解析器,然后执行所需的操作

  2. 采取一些限制您的任务并简化SQL语法并使其成为规则子集的假设。 例如,您可以说列表达式不能有子查询,依此类推。 然后,您可以使用RegExp。

  3. 制作一些简单且通用的CFG,将SQL作为其子集。 然后实现简单的CFG解析器 (手动或使用工具yacc \\ bison)

至于我,我更喜欢第三种情况。 但是,如果您不熟悉所有这些内容,则需要花费11个小时以上的时间来做某事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM