Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2005, 10h19   #1
Invité de passage
 
Inscription : janvier 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2
Points : 0
Points : 0
Par défaut 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
marcucci est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2005, 12h45   #2
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2005, 13h32   #3
Invité de passage
 
Inscription : janvier 2005
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2
Points : 0
Points : 0
Par défaut 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
marcucci est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h16.


 
 
 
 
Partenaires

Hébergement Web