Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/05/2011, 16h01   #1
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
Par défaut Requete SQL calcule sur les colonnes

Salut
j'utilise SGBD MySQL sur un de mes table 2 colonnes doivent afficher le résultat d'un calcul sur 2 autres colonnes l'image ci-jointe présente la façon de calcule .
Si le champs du colonnes C est vide il a la même valeur du colonne 1.
après la novelle valeur du colonne C = l’ancienne valeur de C + la valeur actuelle de A.

La même chose pour la colonne D .

Si quelqu'un a une idée pour créer ce genre de requête merci de la partagé .

merci pour votre aide.
Images attachées
Type de fichier : png Capture-3.png (3,3 Ko, 6 affichages)
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 16h18   #2
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
C'est faisable avec un trigger sur l'insertion.
A chaque fois que tu va insérer une valeur, tu auras le calcul qui se ferra automatiquement et ton champ se remplira.

Tu n'as plus qu'à rechercher comment créer des triggers

Si tu n'y arrive pas n'hésite pas à nous le dire
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h28   #3
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
merci David55 pour la réponse
En fait, j'ai lu un cour sur les TRIGGERS et comment je peux les créer .
j'utilise Hibernate voila le code de mon DAO
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
public  List<TABLE> getCout() {
    	Factory =config.buildSessionFactory();
    	Session session =Factory.openSession();
		try {
 
            session.beginTransaction();
 
 
        org.hibernate.Query q = session.createQuery("create or replace TRIGGER cout )+(before update on TABLE)+( for each row begin)+( if(OLD.C =0) then set NEW.C=OLD.A)+( else set NEW.C=OLD.C+NEW.A)+( ENDIF)+  END  ");
 
        RETURN q.list();
		 } catch (HibernateException e) {
	            throw e;  
	  } finally {
      	Factory.close();
      }
 
	}
j'ai essayé ce code sans parenthésés mais dans les deux cas j'ai cette erreur
Code :
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
java.lang.IllegalArgumentException: node TO traverse cannot be NULL!
	org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:55)
	org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:280)
	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
	DAO.CoutMaint_DAO.getCoutcumul(CoutMaint_DAO.java:60)
	Beans.Coutmaintenace_Bean.getTableCoutmaint(Coutmaintenace_Bean.java:134)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
	com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	org.apache.el.parser.AstValue.getValue(AstValue.java:123)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
	javax.faces.component.UIData.getValue(UIData.java:614)
	org.ajax4jsf.component.UIDataAdaptorBase.getValue(UIDataAdaptorBase.java:1647)
	org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65)
	org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59)
	org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:121)
	org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621)
	org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:339)
	org.richfaces.renderkit.AbstractTableRenderer.encodeTableStructure(AbstractTableRenderer.java:138)
	org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:140)
	org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:128)
	org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
	javax.faces.component.UIData.encodeBegin(UIData.java:983)
	org.ajax4jsf.component.UIDataAdaptorBase.encodeBegin(UIDataAdaptorBase.java:1225)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:266)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:197)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
je ne sais pas comment je peux créer les triggers sous hibernate .
merci en avance .
N.B: les noms des colonnes A,D ne sont pas les noms utilisés dans la base de données c'est seulement pour simplifier l’écriture.
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 16h36   #4
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
Il te manque surement les ';'
Essaye:
Code :
1
2
3
4
5
6
7
8
9
10
 
CREATE OR REPLACE TRIGGER cout BEFORE UPDATE ON TABLE 
FOR EACH ROW 
BEGIN
	IF OLD.C = 0 THEN 
		SET NEW.C:=OLD.A; 
	ELSE 
		SET NEW.C:=OLD.C + NEW.A; 
	ENDIF;
END
Ce qui donne:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
public  List<TABLE> getCout() {
    	Factory =config.buildSessionFactory();
    	Session session =Factory.openSession();
		try {
 
            session.beginTransaction();
 
 
        org.hibernate.Query q = session.createQuery("CREATE OR REPLACE TRIGGER cout BEFORE UPDATE ON TABLE FOR EACH ROW BEGIN IF OLD.C = 0 THEN	SET NEW.C:=OLD.A; ELSE 	SET NEW.C:=OLD.C + NEW.A; ENDIF; END");
 
        RETURN q.list();
		 } catch (HibernateException e) {
	            throw e;  
	  } finally {
      	Factory.close();
      }
 
	}
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 18h29   #5
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
merci David55 j'ai essayé votre code mais j'ai eu cette erreur
Code :
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
org.hibernate.QueryException: unexpected char: ';' [CREATE OR REPLACE TRIGGER cout BEFORE UPDATE ON TABLE FOR EACH ROW BEGIN IF OLD.C = 0 THEN	SET NEW.C:=OLD.A; ELSE 	SET NEW.C:=OLD.C + NEW.A; ENDIF; END]
	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:229)
	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
	DAO.CoutMaint_DAO.getCoutcumul(CoutMaint_DAO.java:61)
	Beans.Coutmaintenace_Bean.getTableCoutmaint(Coutmaintenace_Bean.java:134)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
	com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
	org.apache.el.parser.AstValue.getValue(AstValue.java:123)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
	javax.faces.component.UIData.getValue(UIData.java:614)
	org.ajax4jsf.component.UIDataAdaptorBase.getValue(UIDataAdaptorBase.java:1647)
	org.ajax4jsf.component.SequenceDataAdaptor.getDataModel(SequenceDataAdaptor.java:65)
	org.ajax4jsf.component.SequenceDataAdaptor.createDataModel(SequenceDataAdaptor.java:59)
	org.richfaces.component.UIDataTable.createDataModel(UIDataTable.java:121)
	org.ajax4jsf.component.UIDataAdaptorBase.getExtendedDataModel(UIDataAdaptorBase.java:621)
	org.ajax4jsf.component.UIDataAdaptorBase.setRowKey(UIDataAdaptorBase.java:339)
	org.richfaces.renderkit.AbstractTableRenderer.encodeTableStructure(AbstractTableRenderer.java:138)
	org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:140)
	org.richfaces.renderkit.html.DataTableRenderer.doEncodeBegin(DataTableRenderer.java:128)
	org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
	javax.faces.component.UIData.encodeBegin(UIData.java:983)
	org.ajax4jsf.component.UIDataAdaptorBase.encodeBegin(UIDataAdaptorBase.java:1225)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
	com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:266)
	com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:197)
	org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
	org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
	org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
	org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2011, 23h33   #6
Rédacteur/Modérateur
 
Avatar de David55
 
Homme David S.
Etudiant en alternance
Inscription : août 2010
Messages : 1 167
Détails du profil
Informations personnelles :
Nom : Homme David S.
Âge : 22
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Etudiant en alternance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2010
Messages : 1 167
Points : 2 304
Points : 2 304
IL y a un ';' de trop mais lequel
Essaye d'enlever celui apres le ENDIF!
__________________
Vous trouverez ma page perso avec des tutoriels sur Android et BIRT au lien suivant : http://dsilvera.developpez.com
N'oubliez pas de voter pour les messages dont la réponse est pertinente (en bas à droite du cadrant)
Vous voulez afficher du code :
Votre problème est résolu :
Pas de question technique par MP !
David55
David55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 13h34   #7
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
j'ai enlevé chaque fois un ";" et exécuté le programme mais j'ai eu toujours le même message d'erreur
Code :
org.hibernate.QueryException: unexpected char: ';'
et quand j'ai enlevé tous les ";" j'ai eu ce message
Code :
java.lang.IllegalArgumentException: node TO traverse cannot be NULL!
je ne sais pas comment je dois écrire cette requête.
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h03   #8
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Pourquoi créez vous un trigger via votre code client de la base de données ???

La creation des triggers, des indexes, des contraintes ne doivent pas etre gérés dans votre code.

Créez votre trigger une fois pour toute sur votre serveur (demander a votre administrateur de le faire ou de vous attribuer des droits).

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 12h11   #9
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
merci Yanika_bzh pour votre repose
En faite, je suis entrain de réaliser une application ,a l'aide de JSF et Hibernate, donc je suis l’administratrice de la base des données mais je ne sais pas comment je peux créer ces triggers sur le serveur puisque j'utilise Hibernate .
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h11   #10
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Comment avez vous créez vos tables ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 09h47   #11
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 5
Points : 5
j'ai crée les tables à l'aide de hibernate en utilisant les annotations .
j'ai crée des classes et j'ai construit mes tables à partir de ces classes.
rose-rose est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h37.


 
 
 
 
Partenaires

Hébergement Web