J'essaie d'extraire des données de la base de données distante en utilisant dblink via une fonction, mais en obtenant une erreur "la requête n'a pas de destination pour les données de résultat". J'utilise le langage plpgsql pour faire la même chose.
Une fonction :
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;
Fonction d'appel :
select fun();
Erreur : la requête n'a pas de destination pour les données de résultat
La procédure stockée ne renverra pas simplement le résultat du dernier SELECT. Vous devez réellement renvoyer la valeur:
CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
--- ....
RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;
Vous obtenez l'erreur car Postgres s'attend à ce que la fonction retourne quelque chose de type text, mais votre fonction ne renvoie rien.
La réponse de SL2 était juste, mais vous pouvez l'écrire rapidement:
CREATE OR REPLACE FUNCTION fun() RETURNS text AS $$
BEGIN
--- ....
RETURN(SELECT dblink_disconnect());
END
$$ LANGUAGE plpgsql;