具有不同NLS_LENGTH_SEMANTICS

时间:2016-08-31 14:49:55

标签: database oracle types plsql advanced-queuing

是否可以在两个具有不同NLS_LENGTH_SEMANTICS的数据库之间传播AQ消息,即LOCAL数据库具有BYTE(nls_database_parameters视图),REMOTE数据库具有CHAR(nls_database_parameters视图),如果那怎么样?我已经尝试将会话NLS_LENGTH_SEMANTICS参数值设置为BYTE,然后重新创建REMOTE数据库AQ OBJECT_TYPE,使用BYTE覆盖对象类型属性声明并在本地数据库中创建OID类型并使用transform in propagation,但它没有成功,仍然没有得到

  

" ORA-25215:user_data类型和队列类型不匹配"

传播。

这是我在AQ表中使用的对象类型:

create or replace type obj_sepa_msg as object
(
  client    varchar2(50),
  cartridge varchar2(20),
  iban      varchar2(34),
  file_name varchar2(4000),
  data      clob
)

1 个答案:

答案 0 :(得分:0)

可以在具有不同NLS_LENGTH_SEMANTICS但仅限于系统变量有效负载的数据库之间传播,例如sys.xmltypesys.number。但是,如果您使用的是数据库版本11.2.0.3或更低版本,则无法将它们放入object type。如果你需要对象类型,你可以做这样的事情。传播到远程数据库时向用户添加转换,以便在传播之前将object type转换为sys.xmltype,请注意您仍需要指定有效负载为sys.xmltype。然后,在远程数据库中出列消息后,您可以在dbms_aq.message_properties_t type中指定转换,以将sys.xmltype转换为所需的有效负载。