Y a-t-il mieux que cette requête ?
Car cela suppose que T_SOURCE (qui peut être énorme) va être lue entièrement pour voir si la condition est remplie.Code:
1
2
3
4
5 CREATE TABLE T_CIBLE AS SELECT * FROM T_SOURCE WHERE 1 = 0;
Version imprimable
Y a-t-il mieux que cette requête ?
Car cela suppose que T_SOURCE (qui peut être énorme) va être lue entièrement pour voir si la condition est remplie.Code:
1
2
3
4
5 CREATE TABLE T_CIBLE AS SELECT * FROM T_SOURCE WHERE 1 = 0;
En utilisant dbms_metadata?
Code:SELECT dbms_metadata.get_ddl( 'TABLE', '....' ) FROM DUAL;
Si il n'y a pas de besoin d'automatisation :
Code:CREATE TABLE table_name (field datatype , [...] )
D'autre part si ta table est vraiment enorme elle est surement partitionnee :
Code:
1
2
3
4 CREATE TABLE table_name AS SELECT * FROM source_table PARTITION (partition_name) WHERE 1=0
Cela evitera le full scan.
Le WHERE 1=0 empêche toute lecture de la table :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 select * from sys.all_objects where 1 = 0; -- La première ligne du plan : SELECT STATEMENT ALL_ROWS Cost: 0 Bytes: 119 Cardinality: 1 --Autotrace : Description Value -------------------------------------- ----- recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 0 bytes sent via SQL*Net to client 1043 bytes received via SQL*Net from client 180 SQL*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 0
Haha parfois le probleme c'est qu'il n'y a pas de probleme :ccool:
Maintenant que j'y pense il est vrai que je ne me souviens pas avoir eu de problemes de performance sur ce genre de requete meme sur des tables enormes.
Enfin bref, cool d'avoir une confirmation visuelle !
Thanks.