はのは、テスト目的のために、この単純な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)
ない正確にはかなり、それはトリックを行います。
これは、 '' 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に必要な変更はありません。 –