首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVL (EXPR1 1,0)与NVL(EXPR1,-1)

NVL (EXPR1 1,0)与NVL(EXPR1,-1)
EN

Stack Overflow用户
提问于 2017-02-16 07:11:57
回答 1查看 324关注 0票数 1
代码语言:javascript
复制
MERGE INTO A
USING (  
    SELECT B_1,B_2,B_3,SUM(B_4)
    FROM B
    GROUP BY B_1,B_2,B_3) srt
ON (
    A.A_1 = B.B_1
    AND NVL (A.A_2, 0) =
            NVL (B.B_2, 0)
    AND NVL (A.A_3, ' ') =
            NVL (B.B_3, ' ') )
WHEN MATCHED
THEN   'DML STATEMENT';

以上抛出一个错误

由: java.sql.SQLException: ORA-06502: PL/SQL:数值或值错误:字符转换错误或30926:无法在源表中获得一组稳定的行引起的

但是,当您用以下NVL(EXPR,-1)替换上面的查询时,它工作正常,没有任何错误。有什么理由可以预见到我看不到吗?

代码语言:javascript
复制
MERGE INTO A
USING (  
    SELECT B_1,B_2,B_3,SUM(B_4)
    FROM B
    GROUP BY B_1,B_2,B_3) srt
ON (
    A.A_1 = B.B_1
    AND NVL (A.A_2, -1) =
            NVL (B.B_2, -1)
    AND NVL (A.A_3, ' ') =
            NVL (B.B_3, ' ') )
WHEN MATCHED
THEN   'DML STATEMENT';
EN

回答 1

Stack Overflow用户

发布于 2017-02-16 07:59:59

虽然您的两个查询看起来很相似,但由于在ON子句列中使用的NVL函数,它们的行为可能有所不同。通过分析以上两个查询及其结果,我得出的结论是,A.A_2和B.B_2列中的任何一个都必须具有NULL和0(但不是值-1)。

要解决“无法在源表中获得一组稳定的行”,您必须使用在ON子句中使用的按子查询分组的NVL函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42267213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档