2017-09-22 2 views
1

私はOracle DBをPostgresに移行する必要があります。私はこれを行うことができます。 FDWを使用すると、PostgresでOracleデータにアクセスできます。 Postgres経由でOracleの機能を呼び出したり実行したりする必要があります。Postgres経由でOracle関数を呼び出す/実行する方法はありますか?

これを行う方法はありますか?

私は同じのために、このリンクを発見した: https://github.com/laurenz/oracle_fdw/issues/187

は、いずれかのサンプルや例を私に提供することができますか?

よろしく、

+0

これは、 '' plpythonu'](https://www.postgresql.org/docs/current/static/plpython.html)や['' plperlu''( https://www.postgresql.org/docs/current/static/plperl.html)の機能あるいは、引数をstdinから取り出し、[COPY TO PROGRAM'](https://www.postgresql.org/docs/current/static/sql-copy.html)で呼び出すスクリプトを書くこともできます。これらの作業を行うには、スーパーユーザー権限が必要です。 LaurenzのFDWアプローチとは異なり、Oracle側ではトランザクションの整合性が失われます。しかし、Oracleに必要な変更はありません。 –

答えて

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) 

ない正確にはかなり、それはトリックを行います。

関連する問題