Oracle中带有联接的更新语句

时间:2019-03-07 15:26:33

标签: oracle plsql

我在SQL Server中具有以下代码:

UPDATE tblRecHist 
SET economic_class = (Select C.economic_class from tblComp C join tblRecHist 
RH  on RH.company_id = C.company_id)
WHERE RH.company_id = v_CompID
AND RH.rec_date = v_RecDate;

我已经在Oracle中转换为:

public class FakeClient : SoapHttpClientProtocol
{
    public static Mock<SoapHttpClientProtocol> Mock { get; set; }

    public override object GetData() => Mock.Object.GetData();

    public override object SendData(object data) => Mock.Object.SendData(data);
}

[TestMethod]
public void Function1Test()
{
    FakeClient.Mock = new Mock<SoapHttpClientProtocol>();
    FakeClient.Mock.Setup(mock => mock.GetData()).Returns(...));
    FakeClient.Mock.Setup(mock => mock.SendData(It.IsAny<object>())).Callback(...));

    WebServicesManager.Function1<FakeClient>();
}

由于这是一个大过程的一部分,因此我无法独立执行此过程。 所以,我的问题是逻辑都正确吗?如果没有,可能会发生什么变化?

1 个答案:

答案 0 :(得分:1)

该逻辑将不起作用,因为您的子查询将返回多个记录。与其将tblRecHist加入到子查询中,不如将其省略,并将子查询与tblRecHistUPDATE的当前行相关联。

UPDATE tblRecHist rh
SET economic_class = (Select C.economic_class 
                      from   tblComp C 
                      WHERE  C.company_id = RH.company_id )
WHERE RH.company_id = v_CompID
AND RH.rec_date = v_RecDate;

这假设company_idtblComp中的唯一密钥。