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*Plus Oracle Discussion :

Saut de page


Sujet :

Sql*Plus Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut Saut de page
    Bonjour la communauté,
    Je suis nouveau sur le forum
    Je travaille sur un script qui génère des résultats à imprimer.
    Oracle 10g
    J'ai une requette avec un select sous forme:
    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
     
    set linesize 136
    set pagesize 60
    set ...
     
    column xxx
    column xxxx
    ttitle left 'lll' right 'rrr' skip 1-    
    ...
    spool fichier.lst
     
    select chp1,chp2,chp3 
    from tab1
    where cdt1 and cdt2...
    order by chp1
    ;
    spool off
    exit
    cette requette me retourne par exemple un résultat sous forme:
    Titre
    ...


    res01 res12 res13
    res01 res14 res15
    res01 res16 res17

    res02 res22 res23

    res03 res32 res33
    res03 res34 res35
    res03 res36 res37
    res03 res38 res39
    y a t il une astuce ou possibilité d’intégrer un script (ou autre chose) dans le select // ou intégrer le select dans un script pour avoir des résultats par page
    les 3 résultats "res01" dans une première page
    le résultat "res02" dans une deuxième page
    les 4 résultats "res03" dans une troisième page

    Le but c'est d'avoir un fichier imprimable
    Si quelqu'un peut m'orienter vers une piste
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Tu peux faire une jointure externe avec un row generator de 60 lignes. Est-ce que tes groupes de lignes feront toujours moins de 60 lignes?
    Tu peux aussi passer un script au niveau OS pour faire cette opération. C'est quoi ton OS?

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Bonjour vanagreg et merci pour ton intérêt
    Oui les groupes font moins de 60 lignes
    Au maximum 15 lignes par groupe
    L'OS c'est AIX 5.3
    J'utilise putty pour l'execution du script depuis mon pc
    Peux tu stp me fournir plus d'explication sur le manière d'utiliser un row generator ou sur le script OS

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    J'ai réussi à faire ce que dit Vanagreg, mais ce n'est peut être pas la meilleure solution sql

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT cluster_name, table_name
    FROM all_tables 
    WHERE owner ='SYS' AND cluster_name IS NOT NULL  AND cluster_name <> 'C_OBJ#' 
    ORDER BY cluster_name, table_name
    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
    CLUSTER_NAME	TABLE_NAME
    C_COBJ#	CCOL$
    C_COBJ#	CDEF$
    C_FILE#_BLOCK#	SEG$
    C_FILE#_BLOCK#	UET$
    C_MLOG#	MLOG$
    C_MLOG#	SLOG$
    C_OBJ#_INTCOL#	HISTGRM$
    C_RG#	RGCHILD$
    C_RG#	RGROUP$
    C_TOID_VERSION#	ATTRIBUTE$
    C_TOID_VERSION#	COLLECTION$
    C_TOID_VERSION#	METHOD$
    C_TOID_VERSION#	PARAMETER$
    C_TOID_VERSION#	RESULT$
    C_TOID_VERSION#	TYPE$
    C_TS#	FET$
    C_TS#	TS$
    C_USER#	TSQ$
    C_USER#	USER$
    SMON_SCN_TO_TIME_AUX	SMON_SCN_TIME
    si tu veux faire 1 page par Cluster_name, il faut avoir 60 lignes par cluster_name (sous réserve que tu n'aies pas plus de 60 lignes (sinon, faut aussi gérer les multiples pages par cluster)

    cette requête va fournir le n° de page et le n° de ligne dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT cluster_name, table_name, row_number() OVER (PARTITION BY cluster_name ORDER BY table_name) numligne,
    		DENSE_RANK() OVER (ORDER BY cluster_name) nopage
    FROM all_tables 
    WHERE owner ='SYS' AND cluster_name IS NOT NULL AND cluster_name <> 'C_OBJ#' 
    order by cluster_name, table_name
    Il faut ensuite faire une jointure externe avec une table contenant le nombre total de ligne de toutes les pages
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT LEVEL AS num FROM dual connect BY LEVEL <= 60*:nbpage_total)
    Seul problème, avoir le nombre de pages. Sans refaire une requête, il faudrait peut être utiliser des with recursifs

    Du coup la requête n'est pas très propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT cluster_name, table_name, nopage, numligne, l.num
    FROM (
    SELECT cluster_name, table_name, row_number() OVER (PARTITION BY cluster_name ORDER BY table_name) numligne,
    		DENSE_RANK() OVER (ORDER BY cluster_name) nopage
    FROM all_tables 
    WHERE owner ='SYS' AND cluster_name IS NOT NULL AND cluster_name <> 'C_OBJ#' 
    ) w, (SELECT LEVEL AS num FROM dual 
    			connect BY LEVEL <= (SELECT 60 * COUNT(DISTINCT cluster_name) FROM  all_tables 
    							WHERE owner ='SYS' AND cluster_name IS NOT NULL AND cluster_name <> 'C_OBJ#') )  l
    WHERE l.num = 60 * (w.nopage(+) -1) + w.numligne(+)
    ORDER BY l.num

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Merci McM pour tes explications
    C'est plus clair maintenant
    Je vais tester tout ça
    Merci à vous

  6. #6
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    SQL*Plus a plein de fonctions pour ça, comme BREAK ON ... SKIP PAGE combiné avec SET PAGESIZE
    https://docs.oracle.com/en/database/...0-5C42C546534F

Discussions similaires

  1. [langage] convertir 0x0c en saut de page ?
    Par narmataru dans le forum Langage
    Réponses: 5
    Dernier message: 26/01/2005, 16h41
  2. [Rave Report] les sauts de page
    Par Isa31 dans le forum Rave
    Réponses: 4
    Dernier message: 14/10/2004, 18h51
  3. [VBA] Saut de page...
    Par _Maniak dans le forum Général VBA
    Réponses: 5
    Dernier message: 24/09/2004, 15h26
  4. Réponses: 7
    Dernier message: 05/12/2003, 10h14
  5. [Delphi6] Saut de page
    Par Seb328Ci dans le forum QuickReport
    Réponses: 1
    Dernier message: 02/10/2003, 12h36

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