我有两个模式:A和B(Oracle 9)。在A有一个到B的dblink。在B有一个包,我从A调用.B包中的程序可以返回不同的计数结果,我认为返回一个集合是一个更好的方法,因为这个原因。
create type B.tr_rad as object (
name varchar2(64)
,code number
,vendor number
,val varchar2(255)
,num number
);
create type B.tt_rad as varray(256) of B.tr_rad;
但是从A方案我不能使用tt_rad类型,因为不支持使用dblink的SQL类型。 DBMS_SQL不支持游标。创建具有相同OID的类型是不可能的。
我认为要使用临时表。但首先它不是那么好(在远程函数返回值之后,调用方必须从远程表中选择集合)。人们担心临时表的工作会放缓。
也许谁知道另类互动?
答案 0 :(得分:1)
过去我遇到过类似的问题。然后我得出结论,基本上Oracle的数据库链接除了简单的SQL类型(特别是UDT,CLOBS可能有问题,XMLType也可能)之外的任何东西都“被破坏”了。如果你可以使用OID解决方案,那么祝你好运。
我采用的解决方案是使用Java存储过程,而不是DB链接。
Java存储过程的特征:
这有点工作,但是如果你有一点java,你应该能够从Oracle文档和样本中“剪切并粘贴”一个解决方案。
我希望这会有所帮助。
答案 1 :(得分:0)
答案 2 :(得分:0)
另一种交互是将一个数据库与模式A和B而不是两个带有数据库链接的数据库。
答案 3 :(得分:0)
我的解决方案。 在 B 一侧,我创建临时表,如收集记录。在 A 方面,我有一个DBMS_SQL包装器,它通过dblink调用过程。此过程将结果集合写入临时表。成功完成远程过程后,我从远程临时表中选择结果并将其转换为本地集合类型。
限制 1.需要永久对象同步。 2.不可能性在SQL查询中使用A端程序(称为远程程序)。 3.使用的复杂性。