最大值函数不工作,因为我期望它的工作



我写这个查询,我不知道为什么它不适合我,谁能建议我哪一个是正确的

SELECT MAX(NVL(CPV.SR_NO,0)+1) INTO :CPV.SR_NO FROM CPV
WHERE VOUCHER_ID=4;

我必须带来最大值,我把0,但它从来没有带来1的第一个记录后,一个记录它正常工作意味着,如果表是空的,那么第一个条目不给1后,一个记录保存比它显示的1甚至nvl显示为空到0,然后+ 1请纠正我由于

如果没有VOUCHER_ID = 4的行,那么您将MAX取0行,并且始终是NULL-无论您将MAX取什么表达式。你使用的NVL只有在VOUCHER_ID = 4的行,但在这些行中,SR_NO列中可能有NULL。如果没有开始的行,这将没有帮助。

你可以这样写代码**:

SELECT MAX(SR_NO) INTO :CPV.SR_NO FROM CPV WHERE VOUCHER_ID=4;
:CPV.SR_NO := NVL(:CPV.SR_NO, 0) + 1;

即在SELECT语句之外应用NVL(并添加1)。

话虽如此,你试图用这种方式解决的业务问题是什么?不管你想解决什么问题,这看起来都是一个非常糟糕的方法。

**注意-我以前没有见过限定绑定变量名,如:CPV.SR_NO,但由于查询为您工作,我认为它是好的。编辑-我刚刚尝试过,至少在Oracle 12.2这样的名称是无效的绑定变量;所以我不确定你的代码是如何工作的。

另一个编辑

整个事情可以进一步简化。我们只需要将NVL从MAX中拉出来(以及1的添加):

SELECT NVL( MAX(SR_NO), 0) + 1 INTO :CPV.SR_NO FROM CPV WHERE VOUCHER_ID=4;

相关内容

  • 没有找到相关文章

最新更新