Procédure ou fonction et retour d'une valeur

Max207 Messages postés 19 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 17 octobre 2008 - 22 févr. 2008 à 14:02
ahmas82 Messages postés 3 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 24 janvier 2013 - 28 juil. 2010 à 09:50
Bonjour à tous,

Je fais mes premiers pas en SQL Server et je rencontre quelques difficultés. Pas de soucis niveau création des tables & cies car je suis un habitué de SQL depuis quelques années. Ces derniers temps, j'ai beaucoup travaillé avec PostgreSQL et en particulier sur la programmation côté BDD. J'arrivais à créer des fonctions biens pratiques assez simplement... Nous y voilà car c'est ce que je tente de convertir en SQL Server (ou T-SQL devrais-je dire). Sous cet SQL j'ai du mal à comprendre la différence entre procédure stockée et fonction car d'après ce que j'ai lu elles retournes des valeurs toutes les deux. Pourriez-vous m'expliquer?

Entrons dans le vif du sujet. Je vais vous donner l'exemple d'une fonction que j'utilisais en PostreSQL car je cherche son équivalent en T-SQL.

J'ai donc une fonction delete_user qui a pour but de supprimer un utilisateur en vérifiant si celui-ci est lié à une autre table. Si c'est le cas alors l'utilisateur est supprimé logiquement (càd qu'une valeur dans la table d'utilisateur passe au booléan TRUE, c'est donc un UPDATE) et si il n'est pas lié alors on le supprime physiquement (DELETE). Chose très importante pour moi, selon le cas de suppression je souhaite retourner un code (int) adapté a la situation soit : 0 si suppression logique et 1 si suppression physique.

Voici mon code coté PostreSQL:





create function delete_user(integer) returns integer


//la fonction a un argument type int et retourne un argument type int



AS '
DECLARE var_iduser ALIAS FOR $1;

//la variable passée en paramètre



DECLARE var_temp INTEGER;

//une variable déclarée localement



BEGIN
SELECT id_utilisateur INTO var_temp FROM table_message WHERE id_utilisateur=var_iduser;


//on fait un select de l'id_utilisateur dans la table message.



IF FOUND THEN


//si il y a un résultat (grâce au SELECT INTO var_temp), on fait un UPDATE



    UPDATE table_utilisateur SET delete_logique=TRUE WHERE id_utilisateur=var_iduser;
    return 0;

//la fonction retourne 0, suppression logique



ELSE
    DELETE FROM table_message WHERE id_utilisateur=var_iduser;


//si pas de résultat on fait un delete

 
return 1;

//la fonction retourne 1, suppression physique



END IF;

END;
' LANGUAGE 'plpgsql';




Ensuite je devrai récupérer cette valeur en C#, ASP.NET (ExecuteScalar je crois) mais ça c'est une autre histoire.

Puis-je espérer un ptit coup de main? Merci d'avances. A bientôt !

3 réponses

lemmingperceval Messages postés 128 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 2 août 2009 6
28 févr. 2008 à 14:51
Regarde peut-être:
Si tu veux retourner une valeur, tu dois faire un SELECT à la fin de ta procédure.
0
ahmas82 Messages postés 3 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 24 janvier 2013 1
28 juil. 2010 à 09:48
salut je suis entrain de faire un stage et je veux écrire un fonction qui permet de retouner une valeur et que je récupère dans une procédure stocqué qui permettra de genérer une clé automatique dans mon application je developpe en c#
stp aidez moi je suis bloqué depuis une semaine et mon encadreur attend le résultat vendredi

mon email est ahmas82@yahoo.fr
0
ahmas82 Messages postés 3 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 24 janvier 2013 1
28 juil. 2010 à 09:50
svp ma base de données est sql server 2005
0
Rejoignez-nous