У меня возникли трудности с синтаксисом Oracle 10g для коррелированного UPDATE. Я обрабатываю этот код в PL/SQL-процедуре.Oracle соотносится UPDATE
Я хотел бы подойти к решению проблемы в SQL Server, как так:
UPDATE table_a a
SET a.prov_id=pn.prov_id,
a.step=1
from (
SELECT p.prov_id
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
) pn
Эквивалентный синтаксис Oracle является:
UPDATE table_a a
SET a.prov_id=(
SELECT p.prov_id
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
),
a.step=1
WHERE EXISTS (
SELECT *
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
)
ли это на самом деле запустить подзапрос дважды? Есть ли более сокращенный синтаксис, чем этот?
Взгляните на ключевое слово SQL «MERGE»: оно поддерживается как SQL Server, так и Oracle, как на основе стандартного SQL, поэтому очень переносимо между этими продуктами SQL. – onedaywhen