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 :

Procédure Stockée des plus simples


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut Procédure Stockée des plus simples
    Voici ma procédure toute bête pour comprendre comment ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE PROCEDURE Test
    (
    	@nom	varchar(20)
    )
     
     AS
     
    RETURN 1
    GO
    Dans mon code j'ai fait une fonction
    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
     
      public int executeStoredProcedure(String Pname){
     
            String query = new String("{call "+Pname+"}");
     
             try {
     
                 CallableStatement cs = conn.prepareCall("{call "+Pname+"}");
                 ResultSet rs = cs.executeQuery();
                 return rs.getInt(0);
     
     
                  } catch( SQLException se ) {
                log.error( "SQL Exception:" ) ;
     
                  // Loop through the SQL Exceptions
                while( se != null )
                {
                    log.error( "State  : " + se.getSQLState()  ) ;
                    log.error( "Message: " + se.getMessage()   ) ;
                    log.error( "Error  : " + se.getErrorCode() ) ;
     
                    se = se.getNextException() ;
                }        
            }
            catch( Exception e )
            {
                 log.fatal("FATAL:", e);
            }
     
            return -1;
        }
    L'appel à la fonction est faite ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             //procédure stockée
              int resultat = tool.executeStoredProcedure("Test");
    Et je récupère comme résultat toujours -1 .
    Pourquoi?
    Merci

  2. #2
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    ou tout simplement comment appeler cette procédure stockée à partir de Java?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROC dbo.Test
    AS
    DECLARE @rc Int
     BEGIN
       SELECT @rc = 0
       RETURN @rc
       END
    GO
    Puis comment Récupérer la valeur?

    FAQ
    http://java.developpez.com/faq/jdbc/...lablestatement

  3. #3
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour,
    si votre code doit retourner des valeurs il faut alors définir une fonction et non pas une procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE FUNCTION Test
    (
    	@nom	varchar(20)
    ) returns int
     
     AS begin
    RETURN 1
    end;
    GO

  4. #4
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Ok J'étais restée sur le thème procédure stockée....

    Comment la rentrer dans le serveur SQL SERVER?
    Je vois un onglet Fonctions définies par l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE FUNCTION Test
    (
    	@nom	varchar(20)
    ) returns int
     
     AS begin
    RETURN 1
    end;
    GO
    L'appel de cette fonction se fait-elle de la même façon que pour les procédures stockées?

  5. #5
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour,
    Pour créer cette fonction vous pouvez:
    1/ Exécuter SQL Server Management Studio
    2/ Demander la création d'une nouvelle requête
    3/ vous positionnez sur la base sur laquelle vous souhaitez définir cette requête: 4/ Copier/coller le script de création de la base et l'éxécuter (avec F5)

  6. #6
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Bonjour , Voici ma procédure stockée :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PROCEDURE dbo.PDA
         @Image         int           OUTPUT
    AS
         SET  @Image= 12
    GO
    et mon code Java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                  cstmt = tool.getConnection().prepareCall("{dbo.PDA(?)}");           
                  cstmt.registerOutParameter(1, java.sql.Types.INTEGER); //codeRetour
                  cstmt.execute();
    Ca ne fonctionne pas .
    Le code après le execute n'est jamais executé.

  7. #7
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    :à)))))))

  8. #8
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    bonjour,
    voici un exemple d'appel de procédure stockée en java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		try{
    			DriverManager.registerDriver(new SQLServerDriver());
    			Connection cnx=DriverManager.getConnection("jdbc:sqlserver://monServerSQL; databaseName=laBase","utilisateur","motDePasse");
    			CallableStatement cstmt = cnx.prepareCall("{call dbo.PDA(?)}");
    		    cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
    		    cstmt.execute();
    		    System.out.println("Résultat: " + cstmt.getInt(1));
    		}catch(SQLException sqle){
    			sqle.printStackTrace();
    		}

  9. #9
    Membre habitué
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Points : 178
    Points
    178
    Par défaut
    Merci, j'ai fait la connexion differement mais pas l'appel à la SP.

    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
      try{
                        Connection cnx = tool.getConnection();
                        CallableStatement cstmt = cnx.prepareCall("{call dbo.PDA(?)}");
                        cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
     
                        out.println("avant execute");
     
     
                        cstmt.execute();
                        System.out.println("Résultat: " + cstmt.getInt(1));
     
                        out.println("requete effectuee");
     
     
                    }catch(SQLException sqle){
                        sqle.printStackTrace();
                 }
    Après la commande execute(), il ne fait plus rien, il n'affiche même plus rien. que faire?

    Je rappelle la syntaxe de ma SP :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE PROCEDURE dbo.PDA
         @Image         int           OUTPUT
    AS
         SET  @Image= 12
    GO

  10. #10
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    justement ta procédure fait un traitement mais ne retourne aucun résultat
    exécute plutôt celui ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE dbo.PDA
    AS
       begin
         declare @Image  int          
         SET  @Image= 12
         RETURN @image
       end
    GO
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Non il s'agit d'une procédure avec un paramètre en output

    La procédure est elle bien dans le schéma dbo?
    Etes vous bine positionné sur la bonne base?
    Vous dites vous connecter autrement, est par un pool? utilisez vous la sécurité SQL Server?
    J'ai fait mon test en utilisation la version 1.2 du pilote jdbc vers un serveur SQL server 2005. Quel est votre configuration?

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

Discussions similaires

  1. simple select plus performant que procédure stockée
    Par dens19 dans le forum Développement
    Réponses: 5
    Dernier message: 01/09/2010, 10h36
  2. Procédure stockée : comment faire plus simple / plus fiable ?
    Par allaume dans le forum Accès aux données
    Réponses: 1
    Dernier message: 08/08/2007, 12h17
  3. Récupération des paramètres en sortie d'1 procédure stockée
    Par navis84 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/12/2004, 11h40
  4. Réponses: 5
    Dernier message: 04/10/2004, 18h20
  5. importer des procédures stockées
    Par mohamed dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/09/2004, 16h30

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