ORA-01427:single-row subquery returns more than one row一个更新sql语句遇到的问题:
环境:数据库 DBA, 数据库 DBB,两个数据库做的DBLINK,数据表 TAA,TAB 位于数据库DBA,通过数据库DBB 可以访问,数据表 TBC 位于数据库 DBB,需要 从 TAA,TAB 更新 TBC 中的数据。
1、在数据库 DBB 做一个视图 V_AB 查询 TAA,TAB 的数据
CREATE VIEW V_AB AS
SELECT TAA.COL_CODE, TAA.COL_TYPE, SUM(TAB.COL_QTY) QTY_SUM
FROM TAA, TAB
WHERE TAA.COL_CODE=TAB.COL_CODE
GROUP BY TAA.COL_CODE, TAA.COL_TYPE 更新表 TBC 的数据
UPDATE TBC SET QTY_SUM=
(SELECT QTY_SUM
FROM V_AB
WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE
)WHERE TBC.COL_CRTDATE='2010-05-27'
AND EXISTS (SELECT 1 FROM V_AB WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE)
执行出错:ORA-01427
2、在数据库 DBB 做一个表 V_AB 查询 TAA,TAB 的数据
CREATE TABLE V_AB AS
SELECT TAA.COL_CODE, TAA.COL_TYPE, SUM(TAB.COL_QTY) QTY_SUM
FROM TAA, TAB
WHERE TAA.COL_CODE=TAB.COL_CODE
GROUP BY TAA.COL_CODE, TAA.COL_TYPE 更新表 TBC 的数据
UPDATE TBC SET QTY_SUM=
(SELECT QTY_SUM
FROM V_AB
WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE
)WHERE TBC.COL_CRTDATE='2010-05-27'
AND EXISTS (SELECT 1 FROM V_AB WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE)
执行成功。
说明:表TBC 的主键列:COL_CRTDATE,COL_CODE, COL_TYPE
对以上执行结果不解,不清楚通过视图更新的问题在哪里?
视图 V_AB 和 表 V_AB 的数据是一样,同样的更新语句,用表更新成功过,用视图更新出错。
环境:数据库 DBA, 数据库 DBB,两个数据库做的DBLINK,数据表 TAA,TAB 位于数据库DBA,通过数据库DBB 可以访问,数据表 TBC 位于数据库 DBB,需要 从 TAA,TAB 更新 TBC 中的数据。
1、在数据库 DBB 做一个视图 V_AB 查询 TAA,TAB 的数据
CREATE VIEW V_AB AS
SELECT TAA.COL_CODE, TAA.COL_TYPE, SUM(TAB.COL_QTY) QTY_SUM
FROM TAA, TAB
WHERE TAA.COL_CODE=TAB.COL_CODE
GROUP BY TAA.COL_CODE, TAA.COL_TYPE 更新表 TBC 的数据
UPDATE TBC SET QTY_SUM=
(SELECT QTY_SUM
FROM V_AB
WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE
)WHERE TBC.COL_CRTDATE='2010-05-27'
AND EXISTS (SELECT 1 FROM V_AB WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE)
执行出错:ORA-01427
2、在数据库 DBB 做一个表 V_AB 查询 TAA,TAB 的数据
CREATE TABLE V_AB AS
SELECT TAA.COL_CODE, TAA.COL_TYPE, SUM(TAB.COL_QTY) QTY_SUM
FROM TAA, TAB
WHERE TAA.COL_CODE=TAB.COL_CODE
GROUP BY TAA.COL_CODE, TAA.COL_TYPE 更新表 TBC 的数据
UPDATE TBC SET QTY_SUM=
(SELECT QTY_SUM
FROM V_AB
WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE
)WHERE TBC.COL_CRTDATE='2010-05-27'
AND EXISTS (SELECT 1 FROM V_AB WHERE TBC.COL_CODE=V_AB.COL_CODE AND TBC.COL_TYPE=V_AB.COL_TYPE)
执行成功。
说明:表TBC 的主键列:COL_CRTDATE,COL_CODE, COL_TYPE
对以上执行结果不解,不清楚通过视图更新的问题在哪里?
视图 V_AB 和 表 V_AB 的数据是一样,同样的更新语句,用表更新成功过,用视图更新出错。
解决方案 »
- 大家帮忙看下,我写了个函数返回字符串,在sql中调用不起作用,高手帮忙
- 数据库间用触发器同步数据,响应慢得要死。。。
- 有关在Oracle中根据月份的查询
- 求一个start with ... connect by 层次查询的用法,比较完整的实例以及测试数据,谢谢了!
- oracle 存储过程问题 ,急急急 谢谢
- 请问Orcale数据库中怎么实现完全UTF8字符集的存取?问题重大而普遍,请大家各抒己见
- 执行一个简单sql的速度很慢,帮忙分析一下啊
- 紧急求救!!!!!!!!!!!!
- 求大佬解一难题!非常诡异! PLsql连接正常 用=用户密码也正确
- Oracle 数组问题
- 请教按列分组累计的方法
- JAVA GUI
使用其他方式处理了,在insert数据的时候把该字段数据计算好,不再使用update语句更新。