ORA-01427:单行子查询返回的行多于更新

时间:2020-09-25 16:30:14

标签: oracle stored-procedures sql-update

嗨,我正在尝试执行,但遇到错误的单行子查询返回了多行。

 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';

1 个答案:

答案 0 :(得分:0)

我认为错误几乎可以说明一切。您的查询下面的部分返回多个行。由于我们没有您拥有的数据,因此我们无法进行验证。如果在更新语句中使用了表别名,则进行故障排除也可能会容易一些。

(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')
相关问题