我正在尝试通过使用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();
错误:查询没有结果数据的目的地
答案 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
。