首页 » ORACLE 9i-23ai, PostgreSQL/GaussDB » oracle 如何调用 postgresql中的procedure、function?

oracle 如何调用 postgresql中的procedure、function?

在去O的过程中或当前多种数据库并存时,有些存在跨DB的调用,如可以使用gateway,dblink或fdw在oracle和postgresql间跨数据库访问数据,当前有个项目存在2个数据库存储过程的依赖调用,如果从oracle调用postgresql中的存储过程呢?

对于oracle调用oracle的存储过程

SQL> begin
p1@link_db3;
p1;
end;
/

SQL> exec xxx.p1@link_db3

对于oracle调用postgresql的存储过程

还用oracle的方式会提示ora-6550和PLS-201语法错误, 在OTN上有一篇讨论该话题,提到一种方法

Oracle gateway有个包dbms_hs_passthrough,它将语句直接推送到异构数据库内执行。

-- function
DECLARE
val VARCHAR2(100);
c INTEGER;
nr INTEGER;
m_strVal Varchar2(10) := 'sth';
BEGIN
c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@PG;
DBMS_HS_PASSTHROUGH.PARSE@PG(c, 'select PG_function(?)');
DBMS_HS_PASSTHROUGH.BIND_VARIABLE@PG(c,1,m_strVal);
nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@PG(c);
DBMS_HS_PASSTHROUGH.GET_VALUE@PG(c, 1, val);
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@PG(c);
END;

-- procedure
Instead of Execute&Fetch, try the following procedure:
DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@PG(c,1,m_strVal);

— over —

打赏

,

对不起,这篇文章暂时关闭评论。