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 Firebird Discussion :

comment faire un test dans une PS ?


Sujet :

SQL Firebird

  1. #21
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    là, je sèche aussi ????
    Merci d'ajouter un sur les tags qui vous ont aidé

  2. #22
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    je remets le code tout entier, sait-on jamais !!!

    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
    CREATE PROCEDURE PR_ABH_RESEAU_ASSAINISSEMENT (
        unite char(20),
        date_bilan date)
    returns (
        date_curage date,
        nom_unite varchar(20),
        nom_commune varchar(40),
        lin_total float,
        volume_collecte bigint,
        etat_reseau varchar(15))
    as
    BEGIN
      FOR
        select
            tb_curage.date_curage,
            tb_unite.nom_unite,
            tb_commune.nom_commune,
            tb_commune_pop_lin.lineaire_visitable + tb_commune_pop_lin.lineaire_non_visitable lin_total,
            tb_curage.volume_collecte,
            tb_commune_pop_lin.etat_reseau
     
        from tb_curage
            inner join tb_commune on (tb_curage.code_commune = tb_commune.code_commune)
            inner join tb_centre on (tb_commune.code_centre = tb_centre.code_centre)
            inner join tb_unite on (tb_centre.code_unite = tb_unite.code_unite)
            inner join tb_commune_pop_lin on ((tb_curage.code_commune = tb_commune_pop_lin.code_commune) and
                                          Extract(year from tb_curage.date_curage) = tb_commune_pop_lin.annee_de_comparaison)
     
        where 
        (
          (tb_curage.date_curage =: date_bilan and upper(tb_unite.nom_unite) starting with (:unite))
        )
     
        INTO :date_curage,
             :nom_unite,
             :nom_commune,
             :lin_total,
             :volume_collecte,
             :etat_reseau
     
      DO
      BEGIN
        SUSPEND;
      END
    END
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #23
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut


    une idée

    ta variable unite est déclarée en char(20). A mon avis ce devrait être un VARCHAR, pour éviter les espaces non-significatifs ou
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #24
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message


    une idée

    ta variable unite est déclarée en char(20). A mon avis ce devrait être un VARCHAR, pour éviter les espaces non-significatifs ou
    waw quel oeil !!!!
    c'était, effectivement, ça dehorter olivier
    je te remercierais jamais assez
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #25
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    au plaisir
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #26
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut

    ces PS que des problèmes
    voici un autre problème je balance le code en 1er :
    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
    CREATE PROCEDURE PS_ABH_STATION_EPURATION (
        date_debut date,
        date_fin date)
    returns (
        nom_step varchar(15),
        nom_commune varchar(40),
        nom_unite varchar(20),
        lieux_rejet varchar(15),
        capacite bigint,
        localisation_step varchar(20),
        x_utm bigint,
        y_utm bigint,
        date_mise_service date,
        volume_mj_sortie integer,
        dbo5_sortie integer,
        dco_sortie integer)
    as
    BEGIN
        FOR
        select 
            tb_unite.nom_unite,
            tb_commune.nom_commune,
            tb_step.nom_step,
            tb_step.capacite,
            tb_step.lieux_rejet,
            tb_step.localisation_step,
            tb_step.x_utm,
            tb_step.y_utm,
            tb_step.date_mise_service,
            avg( tb_process.volume_mj_sortie ) volume_mj_sortie,
            avg( ((tb_process.dbo5_entree-tb_process.dbo5_sortie)/nullif(tb_process.dbo5_entree,0))*100 ) dbo5_sortie,
            avg( ((tb_process.dco_entree-tb_process.dco_sortie)/nullif(tb_process.dco_entree,0))*100 ) dco_sortie
        from tb_process
            inner join tb_step on (tb_process.code_step = tb_step.code_step)
            inner join tb_commune on (tb_step.code_commune = tb_commune.code_commune)
            inner join tb_unite on (tb_step.code_unite = tb_unite.code_unite)
        where 
            (
                (tb_process.date_bilan between :date_debut and :date_fin)
            )
        group by    tb_unite.nom_unite, tb_commune.nom_commune, tb_step.nom_step,
                    tb_step.capacite, tb_step.lieux_rejet, tb_step.localisation_step,
                    tb_step.x_utm, tb_step.y_utm, tb_step.date_mise_service
    
        INTO    :NOM_UNITE,
                :NOM_COMMUNE,
                :NOM_STEP,
                :CAPACITE,
                :LIEUX_REJET,
                :LOCALISATION_STEP,
                :X_UTM,
                :Y_UTM,
                :DATE_MISE_SERVICE,
                :VOLUME_MJ_SORTIE,
                :DBO5_SORTIE,
                :DCO_SORTIE
        DO
        BEGIN
          if (date_debut > date_fin) then
          exit;
          suspend;
        END
    END
    dans la partie en rouge je veux lever une exception est-il possible ?

    merci par avance
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  7. #27
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    Les PS sont faites pour résoudre des problèmes et non en créer.
    la vérification que tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (date_debut > date_fin) then
    peut se faire au début de la PS.
    Pour lever une exception... il suffit d'en créer une personnalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create exception Ex_Erreur_Date 'La date de début est postérieure a la date de fin'
    puis de la lever dans la PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (date_debut > date_fin) then EXCEPTION Ex_Erreur_Date
    Voila.
    Si vous êtes libre, choisissez le Logiciel Libre.

  8. #28
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    merci TryExceptEnd
    juste un pépin
    l'exception est levée mais j'ai tjrs un tableau de résulta vide alors que ce que je veux est un arrêt total donc même le tableau de résultat ne sort pas, est-ce possible ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  9. #29
    Membre confirmé Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Points : 574
    Points
    574
    Par défaut
    C'est dans le code client (Delphi ?) que tu doit gérer l'exception levée dans Firebird, ou tout simplement faire la vérification par le code client avant d'appeler la PS.
    Si vous êtes libre, choisissez le Logiciel Libre.

  10. #30
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par TryExceptEnd Voir le message
    C'est dans le code client (Delphi ?) que tu doit gérer l'exception levée dans Firebird, ou tout simplement faire la vérification par le code client avant d'appeler la PS.
    ok TryExceptEnd et merci pour la pertinence de la réponse.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  11. #31
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut de retour ...
    Salut !

    mon code :
    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
    CREATE PROCEDURE PS_ABH_STATION_EPURATION (
        date_debut date,
        date_fin date)
    returns (
        nom_step varchar(15),
        nom_commune varchar(40),
        nom_unite varchar(20),
        lieux_rejet varchar(15),
        capacite bigint,
        localisation_step varchar(20),
        x_utm bigint,
        y_utm bigint,
        date_mise_service date,
        volume_mj_sortie integer,
        dbo5_sortie integer,
        dco_sortie integer)
    as
    BEGIN
        FOR
        select 
            d.nom_unite,
            c.nom_commune,
            b.nom_step,
            b.capacite,
            b.lieux_rejet,
            b.localisation_step,
            b.x_utm,
            b.y_utm,
            b.date_mise_service,
            avg( a.volume_mj_sortie ) volume_mj_sortie,
            avg( ( ( a.dbo5_entree - a.dbo5_sortie ) / nullif( a.dbo5_entree,0 ) ) * 100 ) dbo5_sortie,
            avg( ( ( a.dco_entree - a.dco_sortie ) / nullif( a.dco_entree,0 ) ) * 100 ) dco_sortie
     
        from tb_process a
            inner join tb_step b on (a.code_step = b.code_step)
            inner join tb_commune c  on (b.code_commune = c.code_commune)
            inner join tb_unite d on (b.code_unite = d.code_unite)
     
        where 
            (
                (a.date_bilan between :date_debut and :date_fin)
            )
     
        group by    d.nom_unite, c.nom_commune, b.nom_step,
                    b.capacite, b.lieux_rejet, b.localisation_step,
                    b.x_utm, b.y_utm, b.date_mise_service
     
        INTO    :NOM_UNITE,
                :NOM_COMMUNE,
                :NOM_STEP,
                :CAPACITE,
                :LIEUX_REJET,
                :LOCALISATION_STEP,
                :X_UTM,
                :Y_UTM,
                :DATE_MISE_SERVICE,
                :VOLUME_MJ_SORTIE,
                :DBO5_SORTIE,
                :DCO_SORTIE
        DO
        BEGIN
          IF (:date_debut > :date_fin) THEN EXCEPTION ERREUR_DATE;
          suspend;
        END
    END
    mon problème : l'erreur n'est jamais soulevée même quand j'essaie avec date_debut > date_fin ! pourtant tout parait logique....

    une idée peut-être, merci par avance
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  12. #32
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    normal

    Tes 2 dates sont fournies à l'entrée de la PS.
    Elles sont fournies à la requête pour exécution. Hors si les dates sont fausses la requête ne sortira rien, donc rien ne passe par ton test d'exception.

    Tu dois mettre ton test d’exception avant la requête.
    Merci d'ajouter un sur les tags qui vous ont aidé

  13. #33
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    normal

    Tes 2 dates sont fournies à l'entrée de la PS.
    Elles sont fournies à la requête pour exécution. Hors si les dates sont fausses la requête ne sortira rien, donc rien ne passe par ton test d'exception.

    Tu dois mettre ton test d’exception avant la requête.
    comme toujours bien expliquer merci dehorter olivier
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  14. #34
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Comment faire appel au résultat d'une requête imbriquée
    Salut !
    j'ai cette PS :
    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
    CREATE PROCEDURE PS_RATIO_CENTRE(
        date_debut date,
        date_fin date)
    returns (
        code_unite varchar(2),
        nom_unite varchar(20),
        frais_total bigint,
        volume_collecte bigint,
        ratio_exp_eau_collectee float)
    as
    BEGIN
    FOR
        select 
            /* affichage du code de l'unité */
            e.code_unite,
            /* affichage du nom de l'unité */
            e.nom_unite,
            /* affichage des frais d'exploitation afférente à la période choisie */
            sum( a.frais ) frais,
            /* affichage du volume collecté durant cette période */
            (select sum( tb_curage.volume_collecte )
     
                from tb_unite
                    inner join tb_centre on (tb_unite.code_unite = tb_centre.code_unite)
                    inner join tb_commune on (tb_centre.code_centre = tb_commune.code_centre)
                    inner join tb_curage on (tb_commune.code_commune = tb_curage.code_commune)
     
                where   (
                                ( tb_unite.code_unite = e.code_unite )
                            and ( tb_curage.date_curage between :date_debut and :date_fin)
                        )
            )
            as volume_collecte,
            /* calcul et affichage du ratio d'exploitation */
            avg( frais  / nullif(volume_collecte,0 ) ) ratio_exp_eau_collectee
     
        from tb_frais_exploitations a
            /* jointure simlple pour avoir les centres d'assainissement */
            inner join tb_centre b on ( a.code_centre = b.code_centre )
            /* jointure simple pour avoir les informations de l'unité */
            inner join tb_unite e on ( b.code_unite = e.code_unite )
     
        /* filtrage sur la période choisie */
        where 
            (
                ( a.date_mois between :date_debut and :date_fin )
            )
     
        /* grouper les données pour les synthétiser par unité */
        group by e.code_unite, e.nom_unite
     
        into    :CODE_UNITE,
                :NOM_UNITE,
                :FRAIS_TOTAL,
                :VOLUME_COLLECTE,
                :RATIO_EXP_EAU_COLLECTEE
    do
    begin
      suspend;
    end
    end
    Le compilateur m'indique une erreur de type colonne inconnue dans cette partie là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* calcul et affichage du ratio d'exploitation */
            avg( frais  / nullif(volume_collecte,0 ) ) ratio_exp_eau_collectee
    l'erreur est déclarée pour l'alias volume_collecte mais pas pour frais or que les deux sont des alias !

    comment puis-je exploiter l'alias volume_collecte pour ne pas recopier la requête imbriquée dans l'expression qui calcule le ratio ?

    Merci par avance
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Comment faire 2 sessions dans une application
    Par ZiedCSS dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/04/2007, 14h36
  2. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  3. Faire des test dans une base de donnée
    Par kj_83 dans le forum C++Builder
    Réponses: 15
    Dernier message: 06/07/2006, 09h54
  4. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54
  5. Faire un test dans une procédure
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 23/11/2004, 09h55

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