如何解决ORA-01427:单行子查询返回的行多于更新
嗨,我正在尝试执行,但遇到错误的单行子查询返回了多行。
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,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';
解决方法
我认为错误几乎可以说明一切。您的查询下面的部分返回多个行。由于我们没有您拥有的数据,因此我们无法进行验证。如果在更新语句中使用了表别名,则进行故障排除也可能会容易一些。
(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')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。