Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2009, 15:27
CarlinhoCL
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 3 meses
Puntos: 0
Problemas comparar tablas

Saludos a todos. Me gustaria ver si me pueden ayudar con un problema que tengo con oracle.
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