使用DBMS_REDEFINITION重新定义具有用户定义类型的表

时间:2014-04-25 10:10:30

标签: oracle plsql oracle11g dbms-redefinition

我们开发的应用程序有一个模式USER1,它有表,类型,包等。

我必须将一些用户定义的类型移动到另一个模式USER2。 USER1有几个表依赖于这些用户定义的类型。我们在USER2中重新创建了类型,但在删除USER1中的类型之前,我们必须删除表对它们的依赖。为此,我想通过使用USER2中的用户定义类型(而不是USER1)创建一个中间表来使用DBMS_REDEFINITION

我使用以下命令在USER1中转换用户定义的类型以及在USER2中创建的新类型,其中EMP_LIST是EMP_TYPE的数组。

BEGIN
   DBMS_REDEFINITION.START_REDEF_TABLE( 'user1', 'department', 'department_in'
         , 'dept_id dept_id, dept_name dept_name
         , cast(emp_list as user2.emp_type) emp_list'
         , dbms_redefinition.cons_use_rowid);
END;

但是,我收到以下错误:

  

错误:ORA-22907:对不是嵌套表或VARRAY的类型的CAST无效

我尝试使用MULTISET运算符,但它看起来好像不允许。我们怎么能实现这个目标呢?

1 个答案:

答案 0 :(得分:0)

您可能需要编写PL / SQL函数或对象方法(构造函数),它将一个类型从一个集合转换为另一个集合,从而将一种类型转换为另一种类型。表现不佳。

相关问题