【发布时间】:2014-08-18 22:45:19
【问题描述】:
朋友... 我正在测试这个 Oracle 过程以将所有表、表空间的索引移动到新表空间......我正在尝试调试和修复这个简单的过程,但它给了我光标错误......有人可以指出我的错误吗?
我可以手动生成一些东西,但那里有 200 个表空间,我计划定期移动这些表空间,因此希望自动执行此任务。
目标:在过程运行时接受旧表空间和新表空间,并使用它将该表空间中的所有对象移动到新表空间。
- 我计划执行以下操作:
- 在过程运行时接受 old_tbs、new_tbs
- 将表 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;
/
【问题讨论】:
-
这可能更适合Database Administrators
-
你到底得到了什么错误?
-
@Yarsir,错误发布 LINE/COL ERROR -------- ------------- ---------------------------------------- 6/8 PLS-00341:游标声明“CURTABLE”不完整或格式错误 8/4 PL/SQL:SQL 语句被忽略 9/12 PL/SQL:ORA-00942:表或视图不存在 13/7 PL/SQL:项目被忽略 16/3 PL/SQL:语句被忽略 16/15 PLS-00306:调用“CURTABLE”时参数的数量或类型错误
-
@MikeW,从来不知道 dba 部分.. 在那里创建了问题...