|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2005 Messages : 2 ![]() |
Salut
Habitué à SQL Server, je découvre PostgreSQL et je rencontre des problèmes. J'ai l'habitude, sous SQL Server, de faire des procédures stockées pour accéder à mes données. C'est à dire que depuis mon programme (ASP.NET), j'appelle la procédure stockée et ce qui concerne le SQL est fait dans la procédure (séparation du code). Ayant lu que PostgreSQL supporte les procédures stockées, j'essaye de faire de même (interface Java), et je n'y arrive pas. J'arrive à créer des fonctions qui me renvoient une valeur, mais je n'arrive pas à renvoyer le résultat d'une requète. Prenons l'exemple suivant : table TOTO id champ 1 coucou 2 au revoir la procédure SQL Server CREATE PROCEDURE cherche_texte @id integer AS SELECT CHAMP FROM TOTO WHERE ID = @id En PostgreSQL çà donne CREATE OR REPLACE function cherche_texte(int) RETURNS varchar AS ' BEGIN SELECT CHAMP FROM TOTO WHERE ID = $1; END; ' LANGUAGE 'plpgsql'; Ceci fonctionne. Je n'arrive pas à faire l'équivalent de la procédure suivante : CREATE PROCEDURE tout_toto AS SELECT * FROM TOTO ... En fait je n'arrive pas à trouver quel doit être le type de retour. Est ce faisable? Je vais quand même pas être obligé de mettre la requète en dur dans le code java? Merci Eric |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Bonjour,
- Pour renvoyer un jeu d'enregistrement à partir d'une procédure stockée, il faut déclarer la variable de sortie comme étant du type SETOF de la table (ce type de procédure stockée est nommé SRF dans la documentation, pour Set Returning Functions) - Ta fonction étant triviale, tu peux te contenter de l'écrire en langage SQL Concrètement, cela donne : Code :
CREATE OR REPLACE FUNCTION tout_toto() RETURNS SETOF TOTO AS 'SELECT * FROM TOTO' LANGUAGE 'SQL';
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2005 Messages : 2 ![]() |
Merci pour la réponse.
En fait ce qui me change le plus c'est cette nécessité de 'typer' la fonction. J'ai trouvé aussi le type refcursor, cela semble fonctionner aussi mais je ne sais pas si c'est aussi bien. Vient de la doc : CREATE FUNCTION func2() RETURNS refcursor AS ' DECLARE ref refcursor; BEGIN OPEN ref FOR SELECT col FROM test; RETURN ref; END; ' LANGUAGE 'plpgsql'; Eric |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com