У вас плохой дизайн.
Я говорю о таблицах bd.images_yyyy
. Лучше всего иметь их в одной таблице bd_images с колонкой year, , разбитой на on year.
Ваш запрос станет:
SELECT
x.name, x.year, w.imgblob
FROM
bd.img_idx x
JOIN bd.images w on (x.year = w.year and w.name = x.name)
WHERE
x.name = 'nanananana'
Однако вы можете сделать динамический ddl , если вы не можете изменить базу данных или у вас нет корпоративной лицензии .
Создать шаблон с именем, годом, imgblob (tmptable).
Заполните его:
Procedure populate_tmp (text varchar2)
begin
for r in (select x.name, x.year from bd.img_idx x where x.name= text)
loop
execute immediate 'insert into tmptable values ('||r.name||','||r.year||',' (select w.imgblob from bd.images'||r.year||' w where w.year = '||r.year||' and w.name= '||r.name||'))';
end loop;
end;
и после заполнения ('nananannaa') вы можете выбрать из tmptable.
Внимание : если вы не работаете со старыми данными в tmptable, вы можете создать их как global temporary table on commit delete
. При фиксации данные исчезнут из таблицы.