Одной из проблем здесь является то, что у вас может быть несколько значений, возвращаемых из вашего оператора select.Если это так, то ваш оператор обновления не будет работать, так как вы не можете обновить один столбец до нескольких значений.Если вы знаете, что это не так, то это должно сработать:
update wr_rpt_group a
set a.rpt_category_id = select decode(c.control_plan,
'01', '201',
'02', '202',
'03', '203',
'93')
from grpmisc c
where c.grp = a.grp
and c.sect = a.sect
or a.sect in ('ALL','*'))
where a.rpt_category_id = '93'
and exists (select 1
from grpmisc c
where c.grp = a.grp
and c.sect = a.sect
or a.sect in ('ALL','*'))
Вам нужна вторая часть, чтобы убедиться, что существует запись для установки вашего rpt_category_id, прежде чем пытаться запустить обновление для нее.Если вы также хотели убедиться, что нет повторяющихся записей, вы можете изменить последнюю часть на:
and 1 in (select count(1)
from grpmisc c
where c.grp = a.grp
and c.sect = a.sect
or a.sect in ('ALL','*'))