1. ホーム
  2. postgresql

[解決済み】PostgreSQL。クエリに結果データの保存先がない

2022-01-26 01:33:59

質問

dblink through関数を使ってリモートDBからデータを取得しようとしていますが、「query has no destination for result data」というエラーが発生します。私は同じことをするためにplpgsql言語を使っています。

機能 :

CREATE OR REPLACE FUNCTION fun()
  RETURNS text AS
$$
begin
select dblink_connect(
      'port=5432 dbname=test user=postgres password=****');

WITH a AS (
SELECT *
FROM dblink(
    'SELECT slno,fname,mname,lname
    FROM    remote_tbl'
     ) AS t (slno int, fname text, mname text, lname text)
)
, b AS (
INSERT INTO temptab1
SELECT slno, name
FROM   a
)
, c AS (
INSERT INTO temptab2
SELECT slno, name
FROM   a
)
INSERT INTO temptab3
SELECT slno, name
FROM   a;


select dblink_disconnect();
end;
$$ 
LANGUAGE plpgsql;

呼出機能 :

select fun();

エラー クエリに結果データの格納先がありません。

解決方法

ストアドプロシージャは、最後のSELECTの結果を返すだけではありません。 実際に値を返す必要があります。

CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
    --- ....
    RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;

Postgresは関数がtext型を返すことを期待しているのに、あなたの関数は何も返さないので、エラーが発生します。