日期:2014-05-17  浏览次数:20829 次

如何让解决视图迁移时遇到的依赖问题
在数据迁移脚本编写的时候遇到这样一个问题,为了避免在迁移过程中人的干预,需要解决这样一个问题:迁移视图A时,需要先迁移视图A所依赖的B,视图B也可能在调用视图C,请问这个问题如何解决,用递归函数也可以,谢谢!

------解决方案--------------------
如果对于视图,我觉得可以不用去管依赖,把所有的内容都迁移完成后,统一全编译一次就OK了。
------解决方案--------------------
你的过程里面加上异常处理,捕获后继续执行下一个创建。
加上红色部分。
cmdstr := 'select v.VIEW_NAME from all_views v
where v.OWNER=upper(:1) and v.VIEW_NAME like ''VW_FB_%''
AND NOT EXISTS (SELECT 1 FROM user_views u where u.VIEW_NAME=v.VIEW_NAME)';
open Reg_cur for cmdstr
using pUser;
loop
fetch Reg_cur
into vartab;
exit when Reg_cur% notfound;
select v.text
into varSql
from all_views v
where v.OWNER = upper(pUser)
and v.VIEW_NAME = upper(vartab);
varSql:=upper(varSql);
if len(trim(varSql)) <> 0 then
cmdstr := 'create or replace force view ' || vartab || ' as ' ||
trim(replace(varSql,'PROJECT_','PRJ_'));
begin execute immediate cmdstr;
exception
when others then null;
end;
end if;
end loop;
close Reg_cur;