webentwicklung-frage-antwort-db.com.de

PostgreSQL: Abfrage hat kein Ziel für Ergebnisdaten

Ich versuche, Daten von der fernen Datenbank mithilfe der Funktion dblink durch die Funktion abzurufen, es wird jedoch der Fehler "Abfrage hat kein Ziel für Ergebnisdaten" angezeigt. Ich verwende plpgsql, um dasselbe zu tun. 

Funktion

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;

Aufrufende Funktion :

select fun();

Fehler : Abfrage hat kein Ziel für Ergebnisdaten

14
Meem

Die gespeicherte Prozedur gibt nicht nur das Ergebnis der letzten SELECT-Anweisung zurück. Sie müssen den Wert tatsächlich zurückgeben:

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

Sie erhalten den Fehler, da Postgres erwartet, dass die Funktion etwas vom Typ Text zurückgibt, aber Ihre Funktion nichts zurückgibt.

31
SL2

Die Antwort von SL2 war richtig, aber Sie können es kurz schreiben:

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

Verwenden Sie eine einfache SQL-Funktion anstelle von PL/PgSQL oder verwenden Sie SELECT INTO und gewöhnliches RETURN.

0
mrhotroad