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 :

store proc comme fonction


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2003
    Messages : 21
    Par défaut store proc comme fonction
    vous voyez un probleme la dedans ?

    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
     
    CREATE PROCEDURE sp_TotalHours	@IDFicheTime	INT
    AS
    	DECLARE	@Total		DATETIME,
    			@Return		VARCHAR(25)
     
    	DECLARE TP_cursor CURSOR FOR
    		SELECT TPFromTime, TPAtTime FROM tblTimePlaning WHERE IDFicheTime = @IDFicheTime
     
    	DECLARE 	@TPFromTime		DATETIME
    	DECLARE 	@TPAtTime		DATETIME
     
    	OPEN TotalTime_CURSOR
    	FETCH NEXT FROM TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
    	WHILE @@FETCH_STATUS = 0
    		BEGIN
    			SET @Total = @Total + (@TPAtTime - @TPFromTime)
    			FETCH NEXT FROM TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
    		END
    	CLOSE TotalTime_CURSOR
    	DEALLOCATE TotalTime_CURSOR
     
    	SET @Return = DBO.fn_TIME(@Total)
    	RETURN @Return
    GO
    la fonction fn_Time retourne le DATETIME en string comme ceci:
    12:25 pour 12h 25.

    merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Par défaut
    Quel est le probleme ????

  3. #3
    Membre éclairé Avatar de seb.49
    Profil pro
    ljgdfgdf
    Inscrit en
    Octobre 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : ljgdfgdf

    Informations forums :
    Inscription : Octobre 2002
    Messages : 291
    Par défaut
    tu t'étonne de voir 12:25 au lieu de 12h25 ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Une procedure ne retourne qu'un entier. Sinon il faut passer par les fonctions.
    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 !

  5. #5
    slc
    slc est déconnecté
    Membre averti
    Inscrit en
    Février 2003
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 36
    Par défaut
    Hello,
    j'ai souvenir d'avoir utiliser cette synthaxe dans une procedure stocké car le set ne fonctionnait pas :
    SELECT @Resultat=DBO.fn_TIME(@Total)
    Pas besoin de return

    Par contre le resultat etait recupere sous php. C'est peut etre un cas different ?

    Je vais voir si je retrouve cet exemple.

  6. #6
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2003
    Messages : 21
    Par défaut
    Citation Envoyé par fadace
    Une procedure ne retourne qu'un entier. Sinon il faut passer par les fonctions.
    C'est exactement ça le problème.

    si je fais cela:

    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
     
    CREATE PROCEDURE sp_TotalHours	@IDFicheTime	INT
    AS
    	DECLARE	@Total			DATETIME,
    			@TotalHours		VARCHAR(25),
    			@TPFromTime		DATETIME,
    			@TPAtTime		DATETIME
     
    	DECLARE 	TotalTime_CURSOR CURSOR FOR
    	SELECT 	TPFromTime, TPAtTime 
    	FROM 		tblTimePlaning 
    	WHERE 	IDFicheTime = @IDFicheTime
     
    	OPEN TotalTime_CURSOR
     
    	FETCH FIRST FROM TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
     
    	WHILE (@@FETCH_STATUS = 0)
    	BEGIN
    		SET @Total = @Total + (@TPAtTime - @TPFromTime)
    		FETCH NEXT FROM TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
    	END
     
    	CLOSE TotalTime_CURSOR
    	DEALLOCATE TotalTime_CURSOR
     
    	SELECT @TotalHours = DBO.fn_TIME(@Total)
    GO
    je ne peux même pas execute le store proc!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC sp_TotalHours @IDFicheTime = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Server: Msg 16911, Level 16, State 1, Procedure sp_TotalHours, Line 16
    fetch: The fetch type first cannot be used with forward only cursors.

  7. #7
    Membre chevronné
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Par défaut
    Slt,

    DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
    FOR select_statement
    [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
    par defaut les curseurs, pour des questions de performances sont declares en forward only, donc tu ne peus pas utiliser l'instruction FIRST, il faut que tu rajoutes l'option SCROLL a ton curseur.

    a+

  8. #8
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2003
    Messages : 21
    Par défaut
    FETCH FIRST

    en

    FETCH NEXT

    mais

    la valeur de sortie qui est un varchar
    je ne peux le mettre dans un string.. comme un AnsiString en builderC++

    Invalid variant type conversion

  9. #9
    Membre chevronné
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Par défaut
    Ta proc ne renvoie rien et n'a pas de valeur de sortie ... d'ailleurs les valeur de sortie des procs sont uniquement des INT apres il faut soit renvoyer un recordset ou passer par un parametre OUTPUT.

    a+

  10. #10
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2003
    Messages : 21
    Par défaut
    voici ce que j'ai fais qui es mieu:

    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
     
    CREATE PROCEDURE sp_TotalHours	@IDFicheTime		INT,
    					@TotalHours		VARCHAR(25) OUTPUT
    AS
     
    	DECLARE	@TPFromTime		DATETIME,
    			@TPAtTime		DATETIME,
    			@Total			DATETIME,
    			@TotalTime_CURSOR	CURSOR
     
    	SET @Total = 0
     
    	SET @TotalTime_CURSOR = CURSOR SCROLL DYNAMIC
    	FOR	
    	SELECT 	TPFromTime, TPAtTime 
    	FROM 		tblTimePlaning 
    	WHERE 	IDFicheTime = @IDFicheTime
     
    	OPEN @TotalTime_CURSOR
     
    	FETCH FIRST FROM @TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
     
    	WHILE (@@FETCH_STATUS = 0)
    	BEGIN
    		SET @Total = @Total + (@TPAtTime - @TPFromTime)
     
    		FETCH NEXT FROM @TotalTime_CURSOR INTO @TPFromTime, @TPAtTime
    	END
     
    	CLOSE @TotalTime_CURSOR
    	DEALLOCATE @TotalTime_CURSOR
     
    	SELECT @TotalHours = DBO.fn_TIME(@Total)
    GO
    comme cela je peux avoir ma valeur en varchar

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

Discussions similaires

  1. Oracle10 Delphi2006 Bde+odbc Stored Proc
    Par cedric.mechler dans le forum Oracle
    Réponses: 1
    Dernier message: 11/07/2006, 10h05
  2. MyISAM -> InnoDB (Problème Stored Proc)
    Par Erakis dans le forum Outils
    Réponses: 8
    Dernier message: 12/12/2005, 20h02
  3. Excel - Forcer l'interpretation comme fonction
    Par azman0101 dans le forum Excel
    Réponses: 1
    Dernier message: 27/10/2005, 16h05
  4. Comment obtenir la date dans une store proc?
    Par Dnx dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/10/2005, 17h31
  5. Oracle - SQLJ '- Stores Proc Java
    Par kamalito dans le forum Oracle
    Réponses: 1
    Dernier message: 27/09/2005, 12h11

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