IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Retour NULL d'une fonction utilisateur


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut Retour NULL d'une fonction utilisateur
    Bonjour, voici ma fonction utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    CREATE FUNCTION F_COMPTER_HEURES (@ligne int)  
    RETURNS float
     AS  
    BEGIN
     
    DECLARE @duree float;
    DECLARE @debut DateTime,@fin DateTime;
     
    -- declaration du curseur
    DECLARE CursPlan CURSOR 
    FOR 
    	select DEBUT,FIN from PLANNING WHERE FK_LIGNE_CONTRAT=@ligne and PREVU=1
     
    -- ouverture du curseur
    OPEN CursPlan
     
    -- lecture du premier enregistrement
    FETCH CursPlan INTO @debut, @fin
     
    -- boucle de traitement
    WHILE @@fetch_Status = 0
    	BEGIN
     
    		set @duree = @duree + DATEDIFF(minute,@debut,@fin)
     
     
    -- lecture de l'enregistrement suivant
      	 FETCH CursPlan INTO @debut, @fin
    	END
     
    -- fermeture du curseur
    CLOSE  CursPlan
     
    -- libération de la mémoire
    DEALLOCATE  CursPlan
     
     
    RETURN @duree
     
    END
    La valeur de retour est à NULL

    J'appelle cette fonction depuis un trigger et ça doit mettre à jour un compteur d'heures...

    Mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DATEDIFF(minute,@debut,@fin)
    calcule bien la différence en minutes...

    Mais dans @duree, il n'y a visiblement rien...et dans la base, le champ à mettre à jour est à null.

    J'ai fait le test de retourner DATEDIFF(minute,@debut,@fin)
    ça marche parfaitement...

    Avez vous une idée?

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Votre @duree n'a jamais été instanciée, et NULL - sa valeur par défaut - est une valeur absorbante.

    Ajoutez un set @duree=0 juste après la déclaration.

    Et autre petite question : pourquoi utiliser un curseur ??? Essayez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE FUNCTION F_COMPTER_HEURES (@ligne int)  
    RETURNS float 
     AS  
    BEGIN 
     
    DECLARE @duree float; 
     
    select @duree=SUM(DATEDIFF(minute,DEBUT,FIN))
    from PLANNING 
    WHERE FK_LIGNE_CONTRAT=@ligne 
    and PREVU=1 
     
    RETURN @duree 
     
    END
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut
    Ok, c'est parfait avec @duree=0.

    Pourquoi des curseurs?
    Parce que j'étais parti sur un calcul plus complexe au départ.
    Mais dans ce cas, votre solution est la meilleure...

    Merci beaucoup.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2015, 14h39
  2. Réponses: 1
    Dernier message: 13/12/2006, 14h18
  3. Réponses: 10
    Dernier message: 30/06/2006, 17h41
  4. passage pointeur NULL dans une fonction
    Par reptils dans le forum C
    Réponses: 4
    Dernier message: 11/05/2006, 23h12
  5. Problème avec une fonction utilisateur !
    Par nalou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo