У меня есть таблица, которая содержит table_name и значение столбца ID всех таблиц в схеме, и я хочу установить значение в соответствии с максимальным значением столбца ID в каждой таблице.
Пока у меня естьфункция для получения max (id) из таблицы:
create or replace function get_max_id ( t_name in varchar2 )
return number as max_id number default null;
begin
execute immediate
'select max(id) from ' || t_name into max_id;
return max_id;
end;
И следующий выбор возвращает мне все имена таблиц и значения max (id):
select TABLE_NAME, GET_MAX_ID( owner || '.' || table_name ) max_id
from ALL_TABLES at
where owner = 'SCHEMA_NAME'
and at.TABLE_NAME in (
select eks.NAME from SCHEMA_NAME.ENTITY_KEYS eks
)
Но яизо всех сил пытается обновить ENTITY_KEYS
таблицу со значением max_id.
Это не работает, очевидно (получение single row subquery returns more than one row
):
update SCHEMA_NAME.ENTITY_KEYS eks
set eks.CUR_VALUE = (
select GET_MAX_ID( owner || '.' || table_name ) max_id
from ALL_TABLES t
where owner = 'SCHEMA_NAME'
and eks.NAME in (
select name from SCHEMA_NAME.ENTITY_KEYS
where NAME = t.TABLE_NAME
)
)
;
Как я могу изменить вышеуказанный оператор обновления для обновлениякаждая строка рекурсивно или обновить выбор, чтобы вернуть только одну строку?
Пробовал с объединением и естественно получал ту же ошибку:
update SCHEMA_NAME.ENTITY_KEYS
set CUR_VALUE = (
select GET_MAX_ID( owner || '.' || table_name )
from SCHEMA_NAME.ENTITY_KEYs eks
inner join ALL_TABLES t on t.TABLE_NAME = eks.NAME
where t.owner = 'SCHEMA_NAME'
)
;