2

我们开发的应用程序有一个模式,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 运算符,但它看起来好像是不允许的。我们怎样才能做到这一点?

4

1 回答 1

0

您可能需要编写 PL/SQL 函数或对象方法(构造函数),通过将一个集合中的每个元素分配给另一个集合,将一种类型转换为另一种类型。性能不会好。

于 2014-09-23T09:18:25.137 回答