-
Procédure stockées
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
-
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';
-
Merci!
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