【问题标题】:Returning Multiple Values from Oracle Function over Database Link通过数据库链接从 Oracle 函数返回多个值
【发布时间】:2022-01-12 09:55:15
【问题描述】:

我有两个 oracle 数据库:A 和 B。 在数据库 A 上,我有一个返回用户定义类型的函数:

create or replace type my_type as object
     ( id number,
        f2 varchar2(4000),
        f3 varchar2(4000),
        f4 varchar2(4000)
      );

 CREATE OR REPLACE FUNCTION my_function(p_id NUMBER)   
      RETURN my_type IS   
      v_f1 VARCHAR2;   
      v_f2 VARCHAR2;   
      v_f3 VARCHAR2; 
    BEGIN
    
      SELECT a.f1, a.f2, a.f3
           INTO v_f1, v_f2, v_f3   
      FROM my_table a  
      WHERE a.id= p_id;
    
      RETURN my_type (p_id, v_f1, v_f2, v_f3);
    
    END my_function;

当我从 Oracle A 调用此函数时,它会返回

但是,当我从 Oracle B 调用它时,它会抛出错误:

ORA-30626: 不支持远程对象类型的函数/过程参数

你能告诉我,如何将我的 SQL 查询结果(f1,f2,f3)从数据库 A 获取到数据库 B。 由于性能问题,我不想调用三次查询。

我想出的唯一解决方案是在数据库 A 上将这三个字段连接为一个值,然后在数据库 B 上对其进行子串化,您有更好的主意吗?

【问题讨论】:

  • 数据是否必须来自函数?您可以改用具有四个 OUT 参数的过程吗?

标签: oracle function plsql types database-link


【解决方案1】:

您的对象“my_type”应该具有“SERIALIZE”和“DESRIALIZE”功能,然后您应该能够远程调用您的函数“my_function()”而不会出错。

另请参阅此问题: ORA-30626: function/procedure parameters of remote object types are not supported

还有 oracle 文档: https://www.oracle.com/java/technologies/jpl2-serial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2016-02-22
    • 2012-06-06
    相关资源
    最近更新 更多