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 —
对不起,这篇文章暂时关闭评论。