Обновление оператора в Oracle с объединениями - PullRequest
0 голосов
/ 07 марта 2019

У меня есть следующий код в SQL Server:

UPDATE RH SET
--SELECT RH.economic_class ,
economic_class = C.economic_class
FROM dbo.tblRecHist RH
JOIN tblComp C ON RH.company_id = C.company_id
WHERE RH.company_id = @CompID
AND RH.rec_date = @RecDate

Который я преобразовал в Oracle в:

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;

Поскольку это часть большой процедуры, я не могу выполнить ее самостоятельно. Итак, мой вопрос в том, правильна ли логика? Если нет, что может быть возможным изменением?

1 Ответ

1 голос
/ 07 марта 2019

Эта логика не будет работать, потому что ваш подзапрос вернет более одной записи. Вместо того, чтобы присоединять tblRecHist к вашему подзапросу, пропустите его и сопоставьте подзапрос с текущей строкой tblRecHist из UPDATE.

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_id - это уникальный ключ в tblComp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...