Инструкция обновления в Oracle с помощью joins

#oracle #plsql

#Oracle #plsql

Вопрос:

У меня есть приведенный ниже код в 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:

Эта логика не будет работать, потому что ваш подзапрос вернет более одной записи. Вместо того, чтобы присоединяться 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 .