Нет вывода, потому что вы его не создаете. Ваш динамический запрос не будет выполнен, потому что вы не выбираете столбцы ни во что; если вам действительно нужна целая строка, вам понадобится переменная %rowtype
для выбора, но я не уверен, действительно ли вам нужна целая строка или только одно значение. И, выбрав в чем-то, вам нужно использовать эту переменную - положить ее в таблицу из того, что вы сказали, или отобразить для отладочной информации через dbms_output
.
Ваш оператор вставки не обязательно должен быть динамическим; вы можете просто сделать:
insert into bkp_part (partition_name) values (i.subpartition_name);
Чтобы получить первую строку из каждого подраздела, необходимо установить, что вы имеете в виду под «первым». В этом примере я использую хеш-подразделение, поэтому для аргумента я решу, что «первая» строка является наименьшим значением в этом хэш-ведре, а чтобы сохранить ее просто, меня интересует только одна колонка ,
Я создал фиктивную таблицу:
create table my_table (id number, part_date date)
partition by range (part_date)
subpartition by hash (id)
subpartition template (
subpartition subpart_1,
subpartition subpart_2,
subpartition subpart_3)
(
partition part_1 values less than (date '2015-01-01')
);
insert into my_table values (1, date '2014-12-29');
insert into my_table values (2, date '2014-12-30');
insert into my_table values (4, date '2014-12-31');
Глядя на то, как распределены данные, у меня нет ничего в первом подразделу, идентификаторы 1 и 4 во втором, и ID 2 в в третьих.
Это означает, что я могу сделать:
set serveroutput on
declare
l_id my_table.id%type;
begin
for i in (
select table_name, subpartition_name
from user_tab_subpartitions
where table_name = 'MY_TABLE'
order by table_name, subpartition_position
) loop
-- skipping because I don't have that table
-- insert into bkp_part (partition_name) values (i.subpartition_name);
execute immediate 'select min(id) from ' || i.table_name
|| ' subpartition(' || i.subpartition_name || ')'
into l_id;
-- just for debugging/demo
dbms_output.put_line('Subpartition ' || i.subpartition_name
|| ' minimum ID is ' || l_id);
-- do something else with the value; update or insert...
-- update bkp_part set min_id = l_id
-- where partition_name = i.subpartition_name;
end loop;
end;
/
anonymous block completed
Subpartition PART_1_SUBPART_1 minimum ID is
Subpartition PART_1_SUBPART_2 minimum ID is 1
Subpartition PART_1_SUBPART_3 minimum ID is 2
Вы можете адаптировать, что, чтобы получить столбцы, которые вы заинтересованы и сделать что-то более полезное с ними (например, вставка/обновление вашей bkp_part
таблицы)
Информация о вашей схеме может быть полезно. –