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

SQL Oracle Discussion :

Répétition requête SQL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Par défaut Répétition requête SQL
    Bonjour ,

    J'aimerais bien savoir est ce qu'on peut indiquer dans une reqête sql le nombre de fois qu'on veut qu'elle soit éxécutée.

    par exemple :

    n fois cette requête.
    select min(v.id_voyage) min_id,max(v.id_voyage) max_id
    from t_voyage v


    PS: j'utilise ibatis pour le mapping objet/relationnel

    Merci bcp d'avance

    Cdt,

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    à quoi sert-il d'executer la meme requete plus d'une fois?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Par défaut raison de répétition
    Bonjour,

    cette requête extrait le minimum et maximum des id_voyage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <select id="findVoyageStatSupprById"  parameterClass="Map" resultClass="java.math.BigDecimal">
    		<![CDATA[
    			select min(v.id_voyage) min_id,max(v.id_voyage) max_id 			
    			from t_voyage v 
    		]]>
    		<include refid="whereCommunTable"/>
    		<![CDATA[
    			 and v.est_prevision=1
    			 and v.est_annule=0
    					]]>
    	</select>

    et celle là supprime la ligne(en mettant à jour le champ est_annule=1) qui correspond aux id_voyages entre min et max dans t_voyage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <insert id="deleteVoyageStat" parameterClass="Map" >
    		<![CDATA[
    			update t_voyage set 
    			EST_ANNULE=1,				
    			where id_voyage in ($min$,$max$)
    			and v.est_prevision=1			
    		]]>
    	</insert>

    J'ai besoin de répéter la deuxième requête autant de fois que le nombre compris entre min et max.

    Je vous remercie de votre aide.

    Cdt,

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu veux effacer tous les voyages compris entre min et max? tu veux donc effacer tous les voyages tout court, non?

    Pourquoi donc effectuer plusieurs requête, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE t_voyage SET 
      EST_ANNULE=1
      WHERE est_prevision=1
    devrait être suffisant, non?

    et ne confonds pas IN et BETWEEN

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Par défaut plus de détails
    Rebonjour,

    voici le code de la méthode qui fait la suppression:

    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
     
    public void deleteVoyagesPrev(ILieu origine, ILieu destination,
    			String clientOrigine, String clientDestination, Date debutPeriode,
    			Date finPeriode, int nombreASupprimer) throws DaoException {
    		SqlMapClient sqlMap = SqlManager.getSqlMapInstance();
    		Map<String, Object> map = new HashMap<String, Object>();
    		Object[] minMax = null;
    		BigDecimal min_id = null, max_id = null;
     
     
    			minMax = new BigDecimal[2];
    			if (origine != null)
    				map.put("idLieuOrigine", origine.getIdLieu());
    			if (destination != null) {
    				map.put("idLieuDestination", destination.getIdLieu());
    			}
    			map.put("clientOrigine", clientOrigine);
    			map.put("clientDestination", clientDestination);
    			if (debutPeriode != null) {
    				map
    						.put("dateDebutPeriode", DateHelper
    								.formatDate(debutPeriode));
    			}
    			if (finPeriode != null) {
    				map.put("dateFinPeriode", DateHelper.formatDate(finPeriode));
    			}
    			try{
    			minMax= (BigDecimal[])(sqlMap.queryForObject(
    					"Voyage.findVoyageStatSupprById", map));
    			min_id =(BigDecimal) minMax[0];
    			max_id =(BigDecimal) minMax[1];
    			map.put("min", min_id);
    			map.put("max", max_id);
     
    			sqlMap.queryForObject("Voyage.deleteVoyageStat", map);
     
    		} catch (SQLException e) {
    			throw new DaoException(e);
    		}
    	}
    comme vous pouvez remarquer ,j'ai un nb de suppression à effectuer,j'ai pensé à le passer comme paramètre dans l'une des deux requetes .

    ex:si entre le min et le max on a 200 id_voyage et nombreASupprimer=50,alors on effacera les 50 premiers id_voyage en mettant à jour leur champ est_annule.

    Merci bcp de votre aide

    Cdt,

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu ferais mieux de faire un update que 50, non?

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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