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

标签 postgresql common-table-expression dblink

我正在尝试通过函数使用 dblink 从远程数据库获取数据,但出现错误“查询没有结果数据的目的地”。我正在使用 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 期望函数返回文本类型的东西,但你的函数没有返回任何东西。

关于PostgreSQL:查询没有结果数据的目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946735/

相关文章:

sql - Postgres,plpgsql : Is there a way to connect to other DB from inside of a stored procedure?

用于创建另一个用户拥有的数据库链接的 Oracle 语法

sql - ON DELETE 外键引用的条件逻辑

mysql - 什么是 PostgreSQL 的 EXPLAIN ANALYZE 的 MySQL 等价物

java - JPA EntityManager createQuery() 错误

linq - 将包含 'with' cte的sql语句转换为linq

sql - 使用 CTE 插入雪花

performance - 子查询性能不佳的 PostgreSQL IN 运算符

t-sql - 日期范围交点

oracle - 无法通过使用 DG4MSQL 创建的数据库链接查询 SQL Server 系统表