Как изменить таблицу с помощью курсорной переменной в операторе немедленного выполнения

У меня есть 7 таблиц на сервере PS, у которых есть данные за последние 3 года (миллиарды записей). Требуется переместить все данные в резервную таблицу, кроме данных за последние месяцы. Итак, подходим:

  • 1) изменить имя существующей таблицы в качестве резервной таблицы
  • 2) а затем создать новую таблицу
  • 3), а затем переместите данные за 3 месяца в новую таблицу.

Таким образом обработка данных будет быстрой.

Я попытался с помощью запроса ниже изменить имя таблицы, но это не сработало. Может ли кто-нибудь помочь. Это высокий приоритет.

declare 
 sql_stmt varchar2(1000); 
 cursor c1 is select table_name from staging_clear; 
 type t1 is table of c1%rowtype; 
 curtype t1;
 begin 
 open c1; 
 fetch c1 bulk collect into curtype;  
 for i in 1..curtype.count loop  
 sql_stmt:= 'begin 
          alter table  '||curtype(i).table_name||' rename to '|| curtype(i).table_name||'_bkp';
          dbms_output.put_line(sql_stmt);
   execute immediate sql_stmt; 
   dbms_output.put_line(sql_stmt); 
  end loop;  
 end;

Сообщение об ошибке:

ORA-06550: строка 2, столбец 11: PLS-00103: Обнаружен символ «ALTER» при ожидании одного из следующих действий: начало случая объявить выход для goto, если цикл мод нулевой прагма поднять возврат выбрать обновление при «закрыть текущую выборку удаления» блокировка вставить открыть откат точка сохранения установить sql выполнить фиксацию для канала слияния ORA-06512: в строке 13 06550. 00000 - «строка% s, столбец% s: \ n% s» * Причина: Обычно ошибка компиляции PL / SQL.


person user2268294    schedule 17.11.2013    source источник
comment
Освободите начало в вашем sql_stmt   -  person wvdz    schedule 17.11.2013
comment
У меня тоже высокие приоритеты ...   -  person user272735    schedule 17.11.2013


Ответы (1)


оператор не работает: просто напишите ALTER TABLE и забудьте о начале

sql_stmt:= 'alter table  '||curtype(i).table_name||' rename to '|| curtype(i).table_name||'_bkp';
person TonZ    schedule 17.11.2013