Sucede que me solicitaron crear los script para extraer tablas, vistas, procedimientos... todos los objetos de un esquema.
Eso ya esta y funciona.
El problema, es cuando en TOAD yo comparo 2 esquemas , uno el original y otro que fue el resultado de la extraccion, me detecta diferencias de tipos de datos.
Por ejemplo, campos que en el esquema 1 dice integer y mi extractor trajo como number.
El tema es que consulto la tabla USER_TAB_COLUMNS para extraer las columnas, y en ambos esquemas al ejecutar la Query me dice NUMBER, pero el TOAD, no se de donde extrae el script de la tabla y muestra integer.
Me pueden orientar que hacer? a que se debe que muestra esta diferencia?
Desde ya, muchas gracias por su ayuda.
Ahi esta la query para extraer las tablas, donde {TABLE_NAME} se reemplaza por el nombre la tabla.
Cita:
SELECT texto FROM (
SELECT 1 orden, 'CREATE ' || (CASE WHEN TEMPORARY = 'Y' THEN 'GLOBAL TEMPORARY' END) || ' TABLE '|| table_name || '(' texto FROM user_tables WHERE table_name = '{TABLE_NAME}'
UNION
SELECT
column_id+1 ORDEN ,
' '||RPad((CASE WHEN COLUMN_NAME = '''''' THEN '"''''"' ELSE COLUMN_NAME END), maxLong)
||' '|| RPAD(DATA_TYPE
|| ' ' || (CASE WHEN DATA_TYPE = 'VARCHAR2' OR DATA_TYPE = 'RAW' OR DATA_TYPE = 'VARCHAR' OR DATA_TYPE = 'CHAR' THEN '(' || DATA_LENGTH || ')'
ELSE CASE WHEN (DATA_TYPE = 'NUMBER' OR DATA_TYPE = 'FLOAT') AND DATA_PRECISION IS NOT NULL THEN '(' ||DATA_PRECISION|| CASE WHEN DATA_SCALE > 0 THEN ',' || DATA_SCALE END ||')' END END)
,20)|| ' ' || (CASE WHEN NULLABLE = 'N' THEN 'NOT NULL' END)
|| (CASE WHEN column_id != Count(COLUMN_NAME) over () THEN ',' ELSE '' END )
FROM USER_TAB_COLUMNS, (SELECT Max(Length(column_name))+1 maxLong FROM user_tab_columns WHERE table_name = '{TABLE_NAME}')
WHERE TABLE_NAME = '{TABLE_NAME}'
UNION
SELECT 1000 orden, ')' texto FROM dual
union
SELECT 1001 orden, '/' texto FROM dual
) ORDER BY orden
SELECT 1 orden, 'CREATE ' || (CASE WHEN TEMPORARY = 'Y' THEN 'GLOBAL TEMPORARY' END) || ' TABLE '|| table_name || '(' texto FROM user_tables WHERE table_name = '{TABLE_NAME}'
UNION
SELECT
column_id+1 ORDEN ,
' '||RPad((CASE WHEN COLUMN_NAME = '''''' THEN '"''''"' ELSE COLUMN_NAME END), maxLong)
||' '|| RPAD(DATA_TYPE
|| ' ' || (CASE WHEN DATA_TYPE = 'VARCHAR2' OR DATA_TYPE = 'RAW' OR DATA_TYPE = 'VARCHAR' OR DATA_TYPE = 'CHAR' THEN '(' || DATA_LENGTH || ')'
ELSE CASE WHEN (DATA_TYPE = 'NUMBER' OR DATA_TYPE = 'FLOAT') AND DATA_PRECISION IS NOT NULL THEN '(' ||DATA_PRECISION|| CASE WHEN DATA_SCALE > 0 THEN ',' || DATA_SCALE END ||')' END END)
,20)|| ' ' || (CASE WHEN NULLABLE = 'N' THEN 'NOT NULL' END)
|| (CASE WHEN column_id != Count(COLUMN_NAME) over () THEN ',' ELSE '' END )
FROM USER_TAB_COLUMNS, (SELECT Max(Length(column_name))+1 maxLong FROM user_tab_columns WHERE table_name = '{TABLE_NAME}')
WHERE TABLE_NAME = '{TABLE_NAME}'
UNION
SELECT 1000 orden, ')' texto FROM dual
union
SELECT 1001 orden, '/' texto FROM dual
) ORDER BY orden