Récupération des lignes à partir d'un curseur PostgreSQL
J'ai le curseur de code:
BEGIN;
DECLARE cliente_cursor
CURSOR FOR SELECT * FROM cliente;
Je veux lire tout le contenu de la Table 'cliente':
Avec l'utilisation d'un curseur.
J'ai le code de travail pour SQL Server:
DECLARE cliente_cursor CURSOR
FOR SELECT * FROM cliente
OPEN cliente_cursor
FETCH NEXT FROM cliente_cursor;
While @@FETCH_STATUS=0
BEGIN
FETCH NEXT FROM cliente_cursor;
End
CLOSE cliente_cursor
DEALLOCATE cliente_cursor
Et je veux avoir un code qui fonctionne pour PostgreSQL.
J'ai été à la recherche d'une solution & vu que les gens suggèrent l'aide de fonctions. Je me demande si il n'y a aucune manière dans cette SGBD PostgreSQL pour créer quelque chose de similaire pour le code de SQL Server.
J'avais écrit ce code:
CREATE OR REPLACE FUNCTION MyFunction()
RETURNS setof cliente AS $$
DECLARE
cursor_cliente CURSOR FOR SELECT * FROM cliente;
rec cliente%ROWTYPE;
BEGIN
OPEN cursor_cliente;
loop
--fetch the table row inside the loop
FETCH cursor_cliente INTO rec;
-- check if there is no record
--exit from loop when record not found
if not found then
exit ;
end if;
end loop;
RETURN;
END;
$$ LANGUAGE plpgsql;
Mais quand je le lance, je ne reçois:
select MyFunction();
Une idée de ce que le code devrait-il être à la place?
Toute aide serait appréciée beaucoup!
- Je ne vois pas comment ce que vous voulez diffère de
SELECT * FROM cliente;
il est peut-être parce que je n'ai pas usderstand ms-sql-server - C'est en fait la même. Avec la différence, je veux de la table pour être montré à l'aide d'un curseur.
- l'utilisation d'une boucle for puis.
- pourquoi voulez-vous utiliser un curseur? tous qu'il va faire est de ralentir la requête vers le bas. inline plpgsql s'exécute dans une transaction de même que plpgsql fonctions.
- Comment puis-je utiliser la boucle @Jasen ? Merci pour votre réponse. Je dois utiliser des curseurs en PLPGSQL à faire la même chose que le serveur SQL bloc de phrases
Vous devez vous connecter pour publier un commentaire.
il peut également être fait avec un curseur explicite.
La fonction va persister afin de donner un nom et de le garder ou de le déposer après que vous avez terminé.
Si vous voulez un privé nom de la fonction
pg_temp.foo
sera privé de votre session.Si vous voulez juste pour renvoyer toutes les lignes de la requête, utilisez
et
RETURNS TABLE(column1 type1, column2 type2, ...)
en fonction de son type.Ou pour le curseur:
De faire quelque chose avec chaque ligne, l'utilisation
de cette réponse.
Ou pour le curseur:
pour curseur.
Noter que PostgreSQL a
refcursor
type qui vous permet d'utiliser un curseur par ce texte nom. À mon humble avis il est plus simple (lire plus)