Друзья... Я тестирую эту процедуру Oracle для перемещения всех таблиц, индексов табличного пространства в новое табличное пространство... Я пытаюсь отладить и исправить эту простую процедуру, но она выдает ошибку курсора... может кто-нибудь указать моя ошибка?
Я могу сгенерировать что-то вручную, но там есть 200 табличных пространств, которые я планирую перемещать через равные промежутки времени, поэтому хочу автоматизировать эту задачу.
Цель: принять старое табличное пространство и новое табличное пространство при выполнении процедуры и использовать их для перемещения всех объектов в этом табличном пространстве в новое табличное пространство.
- I plan to do something like below:
- Accept old_tbs, new_tbs at procedure run
- Переместите таблицу A из old_tbs в new_tbs
- Перестроить индексы таблицы A в new_tbs
- Переместите таблицу B из old_tbs в new_tbs
- Перестроить индексы таблицы B в new_tbs
петля...
CREATE OR REPLACE procedure moveTbl (OldTbs in varchar2, NewTbs in varchar2)
IS
TblSQL VARCHAR2(250);
CURSOR curTable (vOwner varchar2, vTblName varchar2, vTbsName varchar2)
IS
SELECT owner, table_name, tablespace_name
FROM dba_tables
WHERE tablespace_name = OldTbs
ORDER BY 2;
rec1 curTable%ROWTYPE;
BEGIN
FOR rec1 IN curTable LOOP
dbms_output.putline('rec1.owner || rec1.table_name');
TblSQL := 'alter table '||rec1.owner||'.'||rec1.table_name||' move tablespace '||NewTbs;
EXECUTE IMMEDIATE TblSQL;
END LOOP; --curTable for loop
END moveTbl;
/
dba_tables
напрямую? Если это так, ваши привилегии могли быть предоставлены через роль. - person Alex Poole   schedule 18.08.2014