所以我试图从gitBash分析一个.pkb文件,我遇到了这个错误:
这是来自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循环放在一行中?这个问题有解决方法吗?
答案 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语言,而您的文件是使用较新版本编写的。在这种情况下,它不是一个错误,而是你的运气不好,你需要更改工具集或等到它得到支持。另一种选择是分析工具支持该语言的较新版本,但由于某种未知原因而设置为使用较旧版本。如果是这样,那么可能只需要进行一些额外的配置。
免责声明:为了清楚起见,让我再说一遍,所有这些都是或多或少受过教育的猜测。