Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1180 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Probleme de tri sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de tri sql

n°1289140
shaman200
Posté le 21-01-2006 à 20:21:13  profilanswer
 

Salut a tous!
 
J'utilise un p'tit script que j'ai trouve sur le net.
J'ai fait quelque modifs d'ordre esthetique.
 

Code :
  1. action(){
  2. sqlplus '/ as sysdba'<<!
  3. SET ECHO OFF
  4. ALTER SESSION
  5.    SET NLS_DATE_FORMAT = 'DD/MM/YYYY HH24:MI:SS';
  6.    Set lines 80
  7.         SET FEEDBACK OFF
  8.         SET TRIMSPOOL ON
  9. col NOM format a21 heading "Nom"
  10. col TOTAL format a15 heading "Total"
  11. col FREE format a15 heading "Espace libre"
  12. col PERCENT_FREE format a20 heading "Pourcentage libre"
  13. select a.tablespace_name as nom,
  14.   lpad(substr(round(a.bytes / (1024*1024),1),1,10)||' M',10) as total,
  15.   lpad(substr(round(b.bytes / (1024*1024),1),1,10)||' M',10) as free ,
  16.   lpad(substr(round(100* b.bytes / a.bytes,1),1,8)||' %',12) as percent_free
  17. from
  18. (select tablespace_name, sum(bytes) bytes from dba_data_files
  19.    group by tablespace_name) a,
  20. (select tablespace_name, sum(bytes) bytes from dba_free_space
  21.    group by tablespace_name) b
  22. where a.tablespace_name = b.tablespace_name
  23. order by percent_free;
  24. !
  25. }
  26. action| awk '/^SQL> /, /^SQL> D/' | grep -v "SQL>"|grep -v "Session altered"


 
Ce script sert a voir l'espace libre des tablespace oracle.
Comme vous pouvez le voir je veux que les resultats soit trié par % d'espace libre.
Voici le resultat
 

Code :
  1. Nom                   Total           Espace libre    Pourcentage libre
  2. --------------------- --------------- --------------- --------------------
  3. ATXCC08UT_0211              2402 M          1250 M              52 %
  4. ATXCCC03UI                   500 M           290 M              58 %
  5. ATXCC10UT_0305              3903 M            25 M              ,6 %
  6. ATXCC10UI_0510               101 M           100 M              99 %
  7. ATXCC08UI_0601               101 M           100 M              99 %
  8. ATXCC10UT_0209              3603 M            50 M             1,4 %
  9. ATXCC17UT_0212              3503 M            50 M             1,4 %
  10. ATXCC08UI_0508               201 M           200 M            99,5 %
  11. ATXCC24UT                    501 M           500 M            99,8 %
  12. ATXCCH06AT                   151 M         150,6 M            99,8 %


 
Le probleme, c'est que des que le nombre n'est plus un entier, le tri est faux (voir ci dessus)
J'ai pas trouver de solution via le tri SQL.... :pfff:  
Enfin,je doit avouer que je suis pas une fleche en SQL  :lol:  
 
Donc si vous avez des idées, n'hesitez pas!!
 
Merci :jap:


---------------
War is Peace,Freedom is Slavery,Ignorance is Strength.
mood
Publicité
Posté le 21-01-2006 à 20:21:13  profilanswer
 

n°1289442
Beegee
Posté le 22-01-2006 à 14:55:20  profilanswer
 

Code :
  1. (...)
  2. ORDER BY percent_free * 100;


 
à essayer :)

n°1289662
shaman200
Posté le 22-01-2006 à 20:25:49  profilanswer
 

salut!
 
J'ai essaye... il me sort ca:
 

Code :
  1. *
  2. ERREUR à la ligne 4 :
  3. ORA-01722: Nombre non valide


 
En gros le tri ne veut pas melanger les nombres qui ont des "," avec les nombres entiers....
 
Peut etre doit on changer qqch dans le "select" ....
 
Franchement, je voit pas le debut d'une reponse.... :cry:  


---------------
War is Peace,Freedom is Slavery,Ignorance is Strength.
n°1289694
shaman200
Posté le 22-01-2006 à 20:59:32  profilanswer
 

arf...j'ai parle trop vite  :pt1cable:  
 
il suffit de lui dire ici  

Code :
  1. lpad(substr(round(100* b.bytes / a.bytes,1),1,10)||' %',12) as percent_free


qu'on ne veut QUE des entiers...

Code :
  1. lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) as percent_free


Bon, comme ca m'interesse que moyen de savoir que le tablespace ait 0,3% exactement d'espace libre,je me contente de 1%  
 
Maintenant, y'a un truc que j'arrive pas a faire:
Je veux qu'il me montre SEULEMENT les TS dans le pourcentage d'espace libre est inferieur a 10.
J'ecris ca

Code :
  1. where a.tablespace_name = b.tablespace_name and percent_free between 0 and 10


mais il me dit

Code :
  1. SQL> select a.tablespace_name as nom,
  2.   2    lpad(substr(round(a.bytes / (1024*1024),1),1,10)||' M',10) as total,
  3.   3    lpad(substr(round(b.bytes / (1024*1024),1),1,10)||' M',10) as free ,
  4.   4    lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) as percent_free
  5.   5  from
  6.   6   (select tablespace_name, sum(bytes) bytes from dba_data_files
  7.   7     group by tablespace_name) a,
  8.   8   (select tablespace_name, sum(bytes) bytes from dba_free_space
  9.   9     group by tablespace_name) b
  10. 10  where a.tablespace_name = b.tablespace_name
  11. 11  and percent_free between 0 and 10 
  12. 12  order by percent_free desc;
  13. and percent_free between 0 and 10
  14.     *
  15. ERREUR à la ligne 11 :
  16. ORA-00904: "PERCENT_FREE" : identificateur non valide


hmm,et la , je voit pas trop comment faire....
 
merci  :jap:


---------------
War is Peace,Freedom is Slavery,Ignorance is Strength.
n°1289764
Beegee
Posté le 22-01-2006 à 22:58:22  profilanswer
 

Code :
  1. SQL> select a.tablespace_name as nom,
  2.   2    lpad(substr(round(a.bytes / (1024*1024),1),1,10)||' M',10) as total,
  3.   3    lpad(substr(round(b.bytes / (1024*1024),1),1,10)||' M',10) as free ,
  4.   4    lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) as percent_free
  5.   5  from
  6.   6   (select tablespace_name, sum(bytes) bytes from dba_data_files
  7.   7     group by tablespace_name) a,
  8.   8   (select tablespace_name, sum(bytes) bytes from dba_free_space
  9.   9     group by tablespace_name) b
  10. 10  where a.tablespace_name = b.tablespace_name
  11. 11  and lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) between 0 and 10 
  12. 12  order by lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) desc;
  13. and percent_free between 0 and 10;


 
edit : il doit y avoir des moyens bien plus simples, mais bon, je verrai demain si j'ai le temps, et une base Oracle sous la main :D


Message édité par Beegee le 22-01-2006 à 23:01:18
n°1289768
Mara's dad
Yes I can !
Posté le 22-01-2006 à 23:11:19  profilanswer
 

order by (b.bytes / a.bytes)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°1296975
shaman200
Posté le 01-02-2006 à 21:25:16  profilanswer
 

Merci a tous ceux qui m'ont aidé  :jap:  
 
Ci dessous mon script qui montre tous les TS ORACLE dont l'espace libre est inferieur ou egal a 10%
 
 

Code :
  1. action(){
  2. sqlplus '/ as sysdba'<<!
  3. SET ECHO OFF
  4. ALTER SESSION
  5.         SET lines 80
  6.         SET FEEDBACK OFF
  7.         SET TRIMSPOOL ON
  8. col NOM format a21 heading "Nom"
  9. col TOTAL format a15 heading "Total"
  10. col FREE format a15 heading "Espace libre"
  11. col PERCENT_FREE format a20 heading "Pourcentage libre"
  12. select a.tablespace_name as nom,
  13.   lpad(substr(round(a.bytes / (1024*1024),1),1,10)||' M',10) as total,
  14.   lpad(substr(round(b.bytes / (1024*1024),1),1,10)||' M',10) as free ,
  15.   lpad(substr(round(100* b.bytes / a.bytes,0),1,10)||' %',12) as percent_free
  16. from
  17. (select tablespace_name, sum(bytes) bytes from dba_data_files
  18.    group by tablespace_name) a,
  19. (select tablespace_name, sum(bytes) bytes from dba_free_space
  20.    group by tablespace_name) b
  21. where a.tablespace_name = b.tablespace_name
  22. and (100* b.bytes / a.bytes) between 0 and 10
  23. order by (b.bytes / a.bytes) desc;
  24. !
  25. }
  26. action| awk '/^SQL> /, /^SQL> D/' | grep -v "SQL>"|grep -v "Session altered"


---------------
War is Peace,Freedom is Slavery,Ignorance is Strength.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Probleme de tri sql

 

Sujets relatifs
Probleme variable de session et requete sqlProblème avec les Vectors ( return ((vector<_Key>::iterator)NULL;)
problème de formulaire[Assembleur] Problème avec la multiplication
Probleme SQL parait il faisable...Probleme autorun pour cdrom
[ASP.NET] Problème avec une connection à la base de donnéesProblème Infopath et JScript
probleme ordre des fichiers dans une galerie 
Plus de sujets relatifs à : Probleme de tri sql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR