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
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.
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;
Verwenden Sie eine einfache SQL-Funktion anstelle von PL/PgSQL oder verwenden Sie SELECT INTO
und gewöhnliches RETURN
.