有没有办法通过Postgres调用/执行Oracle Function?

时间:2017-09-22 07:15:32

标签: oracle postgresql function-call oracle-fdw

我需要将Oracle DB迁移到Postgres,我可以这样做。 通过使用FDW,我可以在Postgres访问Oracle数据。 现在需要通过Postgres调用/执行Oracle的功能。

有没有办法这样做?

我找到了这个链接,同样的: https://github.com/laurenz/oracle_fdw/issues/187

任何人都可以向我提供样品或示例吗?

此致

1 个答案:

答案 0 :(得分:2)

让我们使用这个简单的Oracle函数进行测试:

CREATE OR REPLACE FUNCTION double(n NUMBER) RETURN NUMBER AS
BEGIN
   RETURN n * 2;
END;
/

然后我们可以使用oracle_fdw的一个Oracle表:

CREATE TABLE call_double(inp NUMBER, outp NUMBER);

INSERT INTO call_double VALUES (1, 1);

COMMIT;

现在我们创建一个BEFORE触发器,如下所示:

CREATE TRIGGER double_trig BEFORE UPDATE ON call_double FOR EACH ROW
BEGIN
   :NEW.outp := double(:NEW.inp);
END;
/

现在我们可以在PostgreSQL中创建和使用外表:

CREATE FOREIGN TABLE call_double(
   inp numeric OPTIONS (key 'true'),
   outp numeric)
SERVER oracle OPTIONS (table 'CALL_DOUBLE');

UPDATE call_double SET inp = 12 RETURNING outp;

┌──────┐
│ outp │
├──────┤
│   24 │
└──────┘
(1 row)

不完全漂亮,但它可以解决问题。