Précédent   Forum du club des développeurs et IT Pro > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/10/2012, 17h57   #21
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2012, 14h08   #22
Just-Soft
Membre Expert
 
Homme AbdelHakim Kellouche
Inscription : mai 2008
Messages : 2 048
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 048
Points : 2 148
Points : 2 148
Envoyer un message via MSN à Just-Soft Envoyer un message via Skype™ à Just-Soft
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 :
Citation:
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)
Just-Soft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h13.


 
 
 
 
Partenaires

Hébergement Web