Oracle Loop - декларация - PullRequest
       12

Oracle Loop - декларация

0 голосов
/ 29 января 2019

Я хочу использовать LOOP, чтобы пройти все разделы в таблице, чтобы изменить некоторые данные на разделы.Я начинаю как:

BEGIN
FOR n in (here is the select statement which chooses the partition names)
LOOP
UPDATE table_name    
PARTITION (n)
SET
here are columns to change with new values;
COMMIT;
END LOOP;
END;

Я получаю ошибки ORA 02149 и ORA 06512, что раздел не существует.Это связано с какой-то декларацией?Как мне это решить?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать execute immediate и user_tab_partitions словарь данных вместе как

Begin
  for c in ( select * 
               from user_tab_partitions p 
              where p.table_name = 'TABLE_NAME' 
              order by p.partition_position )
  loop
    execute immediate 'update '||c.table_name||' partition('||c.partition_name||') 
                          set col1 = ''xYz'' ';
    commit;
  end loop;
End;
0 голосов
/ 29 января 2019

Зачем беспокоиться с именем раздела?Какую выгоду вы ожидаете?Просто

update table_name set
  col1 = ...,
  col2 = ...
where condition_goes_here --> this condition will "determine" the partition
...