你能告诉我如何更新oracle中的多行,因为当我触发更新语句时它给了我以下错误
UPDATE BI_BSELATEST_LATESTPRICESTEST
SET PREVIOUS_DAY_CLOSE =
(SELECT DISTINCT aa.DLYPRICE_CLOSE
FROM DATAFEED_EQTY.FEED_DLYPRICE aa ,
(
SELECT a.sc_code , MAX(a.DLYPRICE_DATE) as max_date
from DATAFEED_EQTY.FEED_DLYPRICE a,BI_BSELATEST_LATESTPRICES b
where a.SC_CODE = b.SC_CODE
and a.ST_EXCHNG = 'BSE'
and a.DLYPRICE_DATE < b.upd_time
group by a.sc_code
) bb
WHERE aa.SC_CODE = bb.sc_code
and aa.DLYPRICE_DATE = max_date)
ORA-01427:单行子查询返回多行
提前致谢
答案 0 :(得分:2)
您的陈述中的子查询是错误的。你没有使用WHERE
或FIRST
子句,现在它不会返回多个值。
你基本上试图说PREVIOUS_DAY_CLOSE
应该同时是多个值。我猜你在子选择上留下了一个WHERE
子句,它会将子查询的结果链接到你想要更新的特定行。类似的东西(注意粗体线):
UPDATE BI_BSELATEST_LATESTPRICESTEST
SET PREVIOUS_DAY_CLOSE =
(SELECT DISTINCT aa.DLYPRICE_CLOSE
FROM DATAFEED_EQTY.FEED_DLYPRICE aa ,
(
SELECT a.sc_code , MAX(a.DLYPRICE_DATE) as max_date
from DATAFEED_EQTY.FEED_DLYPRICE a,BI_BSELATEST_LATESTPRICES b
where a.SC_CODE = b.SC_CODE
and a.ST_EXCHNG = 'BSE'
and a.DLYPRICE_DATE < b.upd_time
group by a.sc_code
) bb
WHERE aa.SC_CODE = bb.sc_code
and aa.DLYPRICE_DATE = max_date
<强> 强>
AND bb.sc_code = BI_BSELATEST_LATESTPRICESTEST.sc_code
)
虽然,老实说,我不确定你要对这个查询做些什么。
答案 1 :(得分:0)
我认为你想要的是:
UPDATE BI_BSELATEST_LATESTPRICESTEST b
SET PREVIOUS_DAY_CLOSE =
(SELECT DISTINCT aa.DLYPRICE_CLOSE
FROM DATAFEED_EQTY.FEED_DLYPRICE aa ,
(
SELECT a.sc_code , MAX(a.DLYPRICE_DATE) as max_date
from DATAFEED_EQTY.FEED_DLYPRICE a
where a.SC_CODE = b.SC_CODE
and a.ST_EXCHNG = 'BSE'
and a.DLYPRICE_DATE < b.upd_time
group by a.sc_code
) bb
WHERE aa.SC_CODE = bb.sc_code
and aa.DLYPRICE_DATE = max_date)
这将从子查询中删除BI_BSELATEST_LATESTPRICESTEST,而是告诉数据库使用正在更新的表中的列来过滤子查询。正如您所编写的那样,数据库无法知道如何将子查询中的列与正在更新的表相关联。