Запрос пытается сгенерировать несколько операторов обновления для таблицы loc_final_2, используя значения из audtr_rgn_assgnmnts.Я не уверен, почему commit
существует там, поскольку запросы не выполняются.
Если вообще исходным кодером запроса было запустить несколько обновлений, то я бы сказал, что этонеправильный подход.Одно обновление / MERGE, подобное этому, было бы более простым и производительным.
UPDATE loc_final_2 l
SET
county = (
SELECT upper(TRIM(county) ) --Add MIN/MAX if there are multiple rows
FROM audtr_rgn_assgnmnts a
WHERE l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
);
MERGE INTO loc_final_2 t USING audtr_rgn_assgnmnts s ON (
l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
)
WHEN MATCHED THEN UPDATE SET t.county = UPPER(TRIM(s.county));
Если имеется несколько строк, вам нужно будет сделать выборку в USING
MERGE INTO loc_final_2 t USING (
SELECT DISTINCT city,
state,
upper(TRIM(s.county) ) AS county
FROM audtr_rgn_assgnmnts
)
s ON (
l.city = upper(TRIM(a.city) ) AND l.state = upper(TRIM(a.state) )
)
WHEN MATCHED THEN UPDATE SET t.county = s.county;
РЕДАКТИРОВАТЬ :
что делает в запросе 3-одиночная кавычка
Буквенную кавычку в Oracle нужно экранировать, используя другуюцитаты.Итак, если в вашем последнем запросе должно быть что-то вроде a='b'
, выражение, генерирующее эту строку, должно быть a=||'''b||'''
одна сама по себе, одна кавычка для экранирования этой кавычки, другая часть конкатенации.
потому что мин / макс можно использовать только для чисел, верно?
MAX
и MIN
можно использовать для строк.Здесь я сказал, что вы можете использовать его, чтобы избежать повторяющихся значений для того же округа, возвращенных из внутреннего запроса.DISTINCT
также вариант, если вы не хотите использовать MIN/MAX
.