J'ai réussi à faire ce que dit Vanagreg, mais ce n'est peut être pas la meilleure solution sql
Exemple
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 |
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
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
(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
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 |
Partager