SQL Server语句转Oracle语句 'ORA-01427: 单行子查询返回多个行'.
有个SQLServer语句如下,需要转成Oracle语句updateadjustsetFBillDetailID=d.FID,FSerialNo=d.FSerialNoF...
有个SQL Server语句如下,需要转成Oracle语句
update adjust
set FBillDetailID = d.FID, FSerialNo = d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
where adjust.FBillDetailID is null
改成ORacle语句如下:
update tbloutadjustdetail set(FBillDetailID, FSerialNo) =
(select d.FID, d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null;
错误提示为'ORA-01427: 单行子查询返回多个行'.
请教一下,正确的该如何
用in可能不行,因为需要数据一一对应;
to Bluemonkeyy:
你的方法给我提供了一个新的思路,还真没有这么考虑过。但是存在ora-01779错误,可能是这个子查询没有索引的缘故。实际上,语句中涉及的表FID都是PK,因此这个问题还真是没找到好的解决办法。 展开
update adjust
set FBillDetailID = d.FID, FSerialNo = d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
where adjust.FBillDetailID is null
改成ORacle语句如下:
update tbloutadjustdetail set(FBillDetailID, FSerialNo) =
(select d.FID, d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null;
错误提示为'ORA-01427: 单行子查询返回多个行'.
请教一下,正确的该如何
用in可能不行,因为需要数据一一对应;
to Bluemonkeyy:
你的方法给我提供了一个新的思路,还真没有这么考虑过。但是存在ora-01779错误,可能是这个子查询没有索引的缘故。实际上,语句中涉及的表FID都是PK,因此这个问题还真是没找到好的解决办法。 展开
5个回答
展开全部
update (select d.FID as fid, d.FSerialNo as fserialno,m.FBillDetailID,m.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null) set m.FBillDetailID=fid,
m.FSerialNo=fserialno;
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice)
where tbloutadjustdetail.FBillDetailID is null) set m.FBillDetailID=fid,
m.FSerialNo=fserialno;
展开全部
select d.FID, d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
看执行结果,在判断怎样修改…… 建议你到csdn问,那里专业人士多
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
看执行结果,在判断怎样修改…… 建议你到csdn问,那里专业人士多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select d.FID, d.FSerialNo
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
这是你括弧里面的子查询,这个返回了超过一条数据,单独执行一下看看都是什么数据,是否都需要UPDATE,
是的话就用IN代替等值链接,
否的话呢加新的过滤条件到子查询里面,排除多条留下一条。
From tblProductOut m
Inner Join tblProductOutDetail d
On m.FID = d.FheaderID
Inner Join tbloutadjustdetail adjust
on m.FDate = adjust.FInDate
And m.FNo = adjust.FInNo
And d.FStockID = adjust.FStockID
And d.FPrice = adjust.FOldPrice
这是你括弧里面的子查询,这个返回了超过一条数据,单独执行一下看看都是什么数据,是否都需要UPDATE,
是的话就用IN代替等值链接,
否的话呢加新的过滤条件到子查询里面,排除多条留下一条。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要用 = 用 in
向基本查询的话 SQL Server 和Qracle差不多的
向基本查询的话 SQL Server 和Qracle差不多的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用in确实可以[url=http://www.baidu.com]in[/url]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询