Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 22 sur 22
  1. #21
    Expert Confirmé
    Avatar de Ph. B.
    Homme Profil pro Philippe
    Inscrit en
    avril 2002
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 1 327
    Points : 3 626
    Points
    3 626

    Par défaut

    Bonjour,
    Citation Envoyé par Just-Soft Voir le message
    en fin de compte j'ai opté pour un having (count(*) > 0) pour avoir les bon résultat sans me soucier du traitement du 0.
    Donc cela ne renvoie pas 0 mais NULL
    Citation Envoyé par Just-Soft Voir le message
    voici le code modifié (réellement ) mais qui me donne pas le résultat attendu.
    Quel est le résultat obtenu ? pour l'attendu on sait

    Cela dit:
    1. Quand je regarde la condition de filtre je vois déjà qu'elle ne porte pas sur les colonnes résultat du select. Le préfixe n'est pas bon !
    2. Ensuite, je ne sais pas si votre base est sensible à la casse, mais si c'est le cas, une variation majuscule-minuscule entrainera un résultat faux.
    3. Enfin, les colonnes en question sont de type CHAR et non VARCHAR. Dans le cas de votre test, cela devrait fonctionner, Firebird ignorant les espaces de fins de chaine.

    Cela devrait donner :
    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
    CREATE PROCEDURE SP_CHECK_TABLES (
        date_bilan date)
    returns (
        nom_table varchar(31),
        nom_colonne varchar(31),
        nb_lignes varchar(10))
    AS
    declare variable sqlstmt varchar(128);
    BEGIN
      FOR SELECT f.RDB$RELATION_NAME, f.RDB$FIELD_NAME
     
          FROM RDB$RELATION_FIELDS f
     
          INNER JOIN RDB$FIELDS t
            ON f.RDB$FIELD_SOURCE = t.RDB$FIELD_NAME
            AND t.RDB$FIELD_TYPE = 12 -- 12 => DATE, 35 => TIMESTAMP
          INNER JOIN RDB$RELATIONS r
            ON f.RDB$RELATION_NAME = r.RDB$RELATION_NAME
            AND r.RDB$VIEW_BLR IS NULL
            AND (r.RDB$SYSTEM_FLAG IS NULL OR r.RDB$SYSTEM_FLAG = 0)
    /* pour ne filtrer que sur les champs date dont le nom dans la base est */
    /* date_bilan ou date_mois */
         WHERE
            (
                ( f.RDB$FIELD_NAME = 'Date_Bilan') OR (f.RDB$FIELD_NAME = 'Date_Mois')
    /* Si on est très orthodoxe, on aurait
                (Upper(Trim(f.RDB$FIELD_NAME)) = 'DATE_BILAN') or (Upper(Trim(f.RDB$FIELD_NAME)) = 'DATE_MOIS')
    */
            )
     
      INTO
        :Nom_Table,
        :Nom_Colonne
      DO
      BEGIN
        SqlStmt = 'SELECT DISTINCT COUNT(*) FROM ' || TRIM(Nom_Table) ||
                  ' WHERE (' || TRIM(Nom_Colonne) || ' = ''' || :Date_Bilan || ''')' ||
                  ' HAVING(count(*) > 0) ';
        EXECUTE STATEMENT SqlStmt INTO :nb_lignes;
        SUSPEND;
      END
    END
    Philippe.

  2. #22
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 092
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 092
    Points : 1 977
    Points
    1 977

    Par défaut

    Salut !

    jusqu'ici tout à l'air bien, fort heureusement qu'on a des gens sympa que je remercie vivement (ils doivent se reconnaitre )

    je voudrais à cette étape, mettre le code source ou la PS si possible dans un block car dans mon intention je voudrais avoir une diagnostic spécial mais pas un monitoring comme le fait firebird plutôt quelque chose d'assez personnalisé.

    j'ai essayé de me lancer dans les gestion des blocks, pour commencer j'ai copier un exemple mais j'ai eu sous ibexpert comme erreur :
    Error Message:
    ----------------------------------------
    Cannot perform operation -- DB is not open.
    bien que je suis connecté à ma base de données !

    1. comment exécuter un block code sous ibexpert ?
    2. comment faire pour mettre ma PS sous forme de block ou l'exécuter au sein d'un block ?


    merci par avance.
    Bon courage ou Bonne Chance (selon le contexte)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •