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

Développement SQL Server Discussion :

Curseur et tests


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Curseur et tests
    Bonjour à tous,

    Je suis soumise a un problème de taille en effet, j'ai 2 tables qui ont en apparence rien en commun mais je dois reprendre les résultats d'une table b et les incorporé a une table a
    table b n'est pas modifiable comme elle provient d'une machine
    mon problème est que dans table a ce trouve une liste d'attributs dans un certains ordre pour un certains produit pour chacun de ces attributs un opérateur aura fait les mesures qui générera la table b

    et il faut que je crée une procédure pour qu'a chaque attribut je sélectionne la mesure "correspondante".
    et que je fasse les tests nécessaires pour savoir si les pièces sont conformes ou non.
    Pour l'instant m'a procédure ne marche pas
    j'essaie de faire un curseur dans un curseur mais je n'ai pas d'autre idée
    donc si vous avez des idées ou autre je vous remercie d'avance.
    Merci d'avance !

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    ALTER PROCEDURE [dbo].[LBSA_Calcul_mesures]-- @id_lay int = 1
    AS  
     
     
     
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     DECLARE @id_lay int;	
     DECLARE @mesure nVarchar(50);
     DECLARE  @nom_attri nvarchar(20);
     DECLARE @cible float;
     DECLARE @tol_min float;
     DECLARE @tol_max float;
     DECLARE @resultat float;
     DECLARE @conforme nVarchar(10);
     SET @id_lay = 1;
     DECLARE nom_mesure CURSOR
    FOR SELECT nom_attri,cible, tol_min, tol_max From LBSA_CCTRL_attrib WHERE id_lay = @id_lay;
     
        -- Insert statements for procedure here
     
     
     
     SET @mesure =( SELECT mesure_axe_q From LBSA_CCTRL_Txt);
    IF @mesure IS NULL
    Begin
    SET @mesure =( SELECT mesure_val_test From LBSA_CCTRL_Csv);
    END
    DECLARE res_mes CURSOR FOR SELECT @mesure;
     
    OPEN nom_mesure;
     
    FETCH NEXT FROM nom_mesure INTO 
    @nom_attri,
    @cible,
    @tol_min,
    @tol_max
     
    WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @nom_attri;
     
    		OPEN res_mes;
     
    		FETCH NEXT FROM res_mes INTO
    		@resultat
    		WHILE @@FETCH_STATUS = 0
    		Begin
    		IF @resultat = @cible 
    		begin 
    		 Set @conforme = 'conforme';
    		 end 
    		 IF @resultat < @tol_min OR @resultat > @tol_max
    		 Begin
    		 	 Set @conforme = 'non-conforme';
    		end
    		ELSE 
    		begin
    		Set @conforme = 'non-conforme';
    		end 
    		END
        END;
    	INSERT INTO LBSA_CCTRL_resultat (id_lay,nom_attri,cible,tol_min,tol_max,Conforme)VALUES(@id_lay,@nom_attri,@cible,@tol_min,@tol_max,@conforme)
     
    	CLOSE res_mes;
     DEALLOCATE res_mes;
     
    CLOSE nom_mesure;
     
    DEALLOCATE nom_mesure;
    END

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Avec les informations fournies, ils nous est impossible de vous aider...

    le code n'aide pas trop, car il contient des choses qui n'ont pas de sens, ce qui empêche de comprendre ce que vous essayez de faire (par exemple, vous déclarez un curseur sur un SELECT d'une variable scalaire ?!?).
    Et vous dites que la procédure ne marche pas... c'est un peu court ! est-ce que vous n'obtenez pas le résultat voulu ? ou avez vous une erreur, dans ce cas laquelle ?
    Notez enfin que les curseurs ne seront probablement pas la façon la plus efficace d'arriver à vos fins.

    Postez la structure des tables en jeu, ainsi qu'un jeu d'essai et le résultat attendu, avec les explications concrètes.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    alors voici la table a
    Nom : Capture.PNG
Affichages : 263
Taille : 19,8 Ko
    ici on a le nom des attribut pour l'instant la cible et les tolérances min et max sont vides puisque c'est des données d'un erp en implantation du coup je n'ai pas toutes les données disponibles et voila
    la table b
    Nom : Capture.PNG
Affichages : 241
Taille : 8,3 Ko
    avec les données de l'appareil de mesure
    mon but final c'est que les constantes de l'attribut 1 du moins la cote soit tester par la ligne 1 de la table b pour l'instant je prend l'axe_mesures q mais par la suite je devrais réussir a trouvé la mesure dans les 4 axes.
    Et je fais un select dans une variable puisque si table b est nulle je dois aller la chercher dans table c
    et oui j'ai le message d'erreur suivant
    Nom : Capture.PNG
Affichages : 339
Taille : 5,4 Ko

    merci d'avance pour votre réponse

  4. #4
    Invité
    Invité(e)
    Par défaut
    Mettez de la ponctuation, votre bloc de texte est illisible tel quel.

    Citation Envoyé par tat2398 Voir le message
    et oui j'ai le message d'erreur suivant
    Nom : Capture.PNG
Affichages : 339
Taille : 5,4 Ko
    Le message est pourtant bien explicite, non ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    merci de votre réponse
    oui je comprends le message mais je ne sais pas comment améliorer pour arrivée à quelques chose de juste...

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    du coup je vais essayer de réiterer ma demande

    1) j'ai la table A .
    elle contient des attributs.
    Normalement ces attributs on des valeurs (pour l'instant ce n'est pas le cas pour tous mais ce n'est pas de mon ressort de le faire)

    2) j'ai une table B
    qui est issue d'un Appareil de mesure.
    Si table b et vide il faudra aller chercher les attributs dans table C (pratiquement la même)

    La fusion)
    chaque ligne de table A doit lire une ligne de table B
    par exemple :
    le premier Attributs de la table A doit lire la première ligne de mesure de la table B à chaque lecture une batterie de test est effectuer et ainsi de suite.


    le problème c'est que je ne sais pas comment faire avancer Table A et table B pas à pas ensemble
    sachant qu'aucun innerjoin ne peut être fait comme table B n'est pas liable par quelques chose

    j'espère avoir été assez compréhensible

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    ce serait plus clair avec
    1/ la strucuture des tables sous forme de CREATE TABLE2/ un jeu d'essai sous forme de INSERT INTO3/ le résultat attendu sous forme de tableau.

    Vous pouvez utiliser la fonction de classement ROW_NUMBER pour numéroter les lignes de B, et ainsi pouvoir joindre sur la table A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT *, ROW_NUMBER() OVER(ORDER BY nom_txt) S no
    FROM B
    ou un truc comme ça...

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Merci pour votre réponse
    alors ma table des attributs c'est celle ci
    Nom : Capture.PNG
Affichages : 205
Taille : 9,5 Ko
    Les insertions sont faites dans un modules à part du calcul des mesures.

    et la table des mesures c'est celle ci et elle est insérer par un bulk insert
    Nom : Capture.PNG
Affichages : 233
Taille : 13,7 Ko

    et ensuite on fait uniquement des test si la cible dans table A correspond a la mesure de table B.
    Si non on test si tolérance min de table A inférieur à la mesure de table ou si elle est inférieur à la tolérance max de table A.
    Si c'est le cas alors c'est conforme sinon non.
    et du coup on insère l'ensemble dans une Table resultat comme ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO LBSA_CCTRL_resultat (id_lay,nom_attri,cible,tol_min,tol_max,Conforme)VALUES(@id_lay,@nom_attri,@cible,@tol_min,@tol_max,@conforme)
    de ce fait je n'ai pas de jeu de test approprement parler
    merci encore pour votre réponse

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Ne faites pas de copie d'écran. Des images c'est merdique on est obligé de tout récrire. C'est pas compliqué de poster un code !

    A +

  10. #10
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 792
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    De ce que je comprends du problème :
    La table A contient un ensemble d'"étalon de mesures" numérotés de 1 à n.
    D'une certaine façon un robot lit ces lignes et procède aux tests dans l'ordre, ce qui produit une table B avec strictement autant de lignes que dans la table A.
    Une fois le travail effectué, on souhaite rapprocher les mesures effectives aux étalons.
    La logique est que chaque ligne de mesure correspond au n° de ligne de la table d'étalon.

    Dans ce cas, j'utiliserais la suggestion de aieeeuuuuu pour numéroter les lignes des 2 tables dans l'ordre attendu et faire la jointure sur cette numérotation

    Code non testé, juste pour donner la trame :

    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
     
    With 
     Table_b as
        (SELECT  ROW_NUMBER() OVER(ORDER BY B.nom_txt) as No
            ,B.*
        FROM B
        )
    ,Table_a as
        (SELECT  ROW_NUMBER() OVER(ORDER BY id_att) as No
            ,A.*
        FROM A
        )
    Select *
    from Table_a as TA
            inner join Table_b as TB
                on TA.No=Tb.No

Discussions similaires

  1. test sur curseur
    Par Med_ayoub dans le forum PL/SQL
    Réponses: 1
    Dernier message: 01/08/2012, 12h04
  2. Curseur et test de table
    Par Captain_choko dans le forum PL/SQL
    Réponses: 3
    Dernier message: 06/07/2010, 16h02
  3. test curseur existe sur textarea
    Par midosd dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/04/2009, 10h31
  4. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09
  5. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

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