PostgreSQL:Query没有结果数据的目的地

时间:2014-05-30 03:51:46

标签: postgresql common-table-expression dblink

我正在尝试通过使用dblink through function从远程数据库获取数据,但是收到错误"查询没有结果数据的目的地"。我使用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();

错误:查询没有结果数据的目的地

4 个答案:

答案 0 :(得分:35)

存储过程不会只返回最后一个SELECT的结果。您需要实际返回值:

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

您收到错误是因为Postgres希望该函数返回类型文本的内容,但您的函数不会返回任何内容。

答案 1 :(得分:1)

来自SL2的回答是对的,但你可以用很短的方式写出来:

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

答案 2 :(得分:1)

出现错误的原因是因为 BEGIN END 之间没有返回

    BEGIN
        update mytable set lastcodeused = to_char(cast(lastcodeused as INTEGER)+1, 'FM999999999999999999') where 
        classid = classIdVar and appid= appIdInt 
        RETURNING concat(pageUniqueCode,lastcodeused) as pageUniqueCode
        into taskcode;
        return taskcode;
    END;

答案 3 :(得分:0)

使用普通SQL函数代替PL / PgSQL ,或使用SELECT INTO和普通的RETURN