解析.PKB文件时出错

时间:2017-10-23 06:48:36

标签: pmd

所以我试图从gitBash分析一个.pkb文件,我遇到了这个错误:

enter image description here

这是来自pkb的第737行:

        FOR sum_res IN (SELECT SUM(loss_reserve) loss_reserve,
                               SUM(expense_reserve) exp_reserve
                          FROM gicl_clm_reserve a, gicl_item_peril b
                         WHERE a.claim_id = b.claim_id
                           AND a.item_no  = b.item_no
                           AND a.peril_cd = b.peril_cd
                           AND a.claim_id = p_claim_id
                           AND (NVL(b.close_flag, 'AP') IN ('AP','CC','CP') OR 
                                NVL(b.close_flag2, 'AP') IN ('AP','CC','CP')))
        LOOP
           v_loss_res_amt  := sum_res.loss_reserve;
           v_exp_res_amt   := sum_res.exp_reserve;
        END LOOP;

如果我错了,请纠正我,但据我所知,它希望我将FOR循环放在一行中?这个问题有解决方法吗?

1 个答案:

答案 0 :(得分:0)

我真的很怀疑编辑空格在这里会有什么好处。

一般来说,它不需要你的任何东西。它崩溃得非常厉害,因为它无法分析这个SQL片段。在SQL中,空格的使用相当松散,因此解析器在处理多行查询时应该没有问题。

它在阅读" SUM"关键字,但至于为什么,不知道。通过堆栈跟踪IsTypeOf / IsNullCondition / UnaryExpresion进行猜测,它可能会在某个地方期待更简单的事情。

根据错误SUM SUM判断,也许它希望内部SELECT返回单个列,因此可能在注意到第二个SUM关键字并产生错误oops, I found SELECT SUM , SUM (..) in a single-value-query context时失败。不幸的是,异常消息缺乏该领域的细节。

除了在这里等待有更多经验的人比我(并且我没有,我根据我在静态代码分析和你提供的异常文本方面的经验做出回应)时,我会将此作为错误票发送给PLSQLParser类/模块的开发人员 - 对我来说,它看起来像是一个错误或PL / SQL规范未实现的部分。

也可能是解析器仅支持某些旧版本的PL / SQL语言,而您的文件是使用较新版本编写的。在这种情况下,它不是一个错误,而是你的运气不好,你需要更改工具集或等到它得到支持。另一种选择是分析工具支持该语言的较新版本,但由于某种未知原因而设置为使用较旧版本。如果是这样,那么可能只需要进行一些额外的配置。

免责声明:为了清楚起见,让我再说一遍,所有这些都是或多或少受过教育的猜测。

相关问题