【问题标题】:ORA-01427: single-row Subquery Returns More Than One Row for UpdateORA-01427: 单行子查询返回多行进行更新
【发布时间】:2020-09-25 16:30:14
【问题描述】:

您好,我正在尝试执行,但收到​​错误单行子查询返回多行。

 update  upld_mktprice
                        set (upld_mktprice.orig_security, upld_mktprice.stk_exch, upld_mktprice.stk_group, upld_mktprice.instr_type) =
                                                                (select  security.security,nvl(upld_mktprice.stk_exch, 
                                                                nvl(security.stk_exch,'DIRECT')), 
                                                                security.stk_group,
                                                                decode(upld_mktprice.source,'FOREX','X','S') as instr_type -- HLAMUAT-1457146: Passing DIRECT as a default value for HLAM. confirmed by Dheeren/Prasanth.
                                                                from    v_security_all security
                                                                where   upld_mktprice.security =  Decode(security.asset_type,'OPT',security.stk_sec_id||' '||substr(security.security,instrb(security.security, ' ', 1,1)+3, length(security.security)),security.stk_sec_id)
                                                                and     rectype = 'L'),
                        upld_mktprice.currency = nvl(upld_mktprice.currency,''),
                        upld_mktprice.value_date = nvl(upld_mktprice.value_date,''),
                        upld_mktprice.amc_code = 'AMC'
          Where   exists  (select 1
                            from    v_security_all security
                            where   upld_mktprice.security =  Decode(security.asset_type,'OPT',security.stk_sec_id||' '||substr(security.security,instrb(security.security, ' ', 1,1)+3, length(security.security)),security.stk_sec_id)
                            and rectype = 'L')
            and     upld_mktprice.orig_security is null
            and       upld_mktprice.user_id       = 'SRINIVAS'
            and       upld_mktprice.source       = 'MKTPRICEMAN';

【问题讨论】:

    标签: oracle stored-procedures sql-update


    【解决方案1】:

    我认为错误本身就说明了一切。下面的查询部分返回不止一行。我们无法验证,因为我们没有您拥有的数据。如果您在更新语句中使用表别名,也可能更容易排除故障。

    (SELECT security.security,
                       NVL (upld_mktprice.stk_exch, NVL (security.stk_exch, 'DIRECT')),
                       security.stk_group,
                       DECODE (upld_mktprice.source, 'FOREX', 'X', 'S')     AS instr_type -- HLAMUAT-1457146: Passing DIRECT as a default value for HLAM. confirmed by Dheeren/Prasanth.
                  FROM v_security_all security
                 WHERE     upld_mktprice.security =
                           DECODE (security.asset_type,
                                   'OPT',    security.stk_sec_id
                                          || ' '
                                          || SUBSTR (security.security,
                                                       INSTRB (security.security,
                                                               ' ',
                                                               1,
                                                               1)
                                                     + 3,
                                                     LENGTH (security.security)),
                                   security.stk_sec_id)
                       AND rectype = 'L')
    

    【讨论】:

    • 我尝试在 select 语句中使用 'distinct' 执行,但也出现同样的错误。
    • 是否有可能根据这个where子句返回多条记录?
    • 是的,通过使用 nvl。解码 (Nvl(security.cll_dp_stk,'N') ,'L',security.security, Decode(security.asset_type,'OPT',security.stk_sec_id||' '||substr(security.security,instrb(security.安全, ' ', 1,1)+3, 长度(security.security)),security.stk_sec_id) )
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2022-01-08
    • 2017-11-02
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多