Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Es posible exp de solo datos?

Estas en el tema de Es posible exp de solo datos? en el foro de Oracle en Foros del Web. Que tal amigos, Resulta que debo cambiar en las tablas de una BD las columnas de tipo varchar2 a tipo char El proceso que tengo ...
  #1 (permalink)  
Antiguo 13/09/2007, 14:08
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Es posible exp de solo datos?

Que tal amigos,

Resulta que debo cambiar en las tablas de una BD las columnas de tipo varchar2 a tipo char

El proceso que tengo pensado para hacer esto es el siguiente:

Construi una BD solo con la estructura de tablas que me debe quedar (sin los varchar2), lo que necesito es poblar esas tablas con los datos que me entregarian desde un archivo exp.dmp pero el imp no da opcion de cargar solo datos, al igual que el exp (generar solo datos)

EL lio es que son mas de mil tablas (objetos)

Quedo atento a recibir cualquier ayuda para resolver dicho lio

Un Cordial Saludo
  #2 (permalink)  
Antiguo 13/09/2007, 15:37
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Es posible exp de solo datos?

No estoy seguro porque nunca utilizo los char, solo los varchar2, pero supongo que no servirá un simple "modify", si me acuerdo mañana lo miro en el curro.
Si eso no cuela, lo que si podrías hacer es renombrar uno de los dos set de tablas ( el de las varchar2 o el de las char ), hacer un insert /*+ append*/..... select into char select * from varchar. ¿ no te serviria esto ?
  #3 (permalink)  
Antiguo 13/09/2007, 15:56
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Re: Es posible exp de solo datos?

Que tal jc3000

Gracias por tu respuesta

Pero entonces.... ahi me tocaria hacer el imp de la BD que me entregan (la que contiene los varchar2) en un tablespace diferente y hacer el select que indicas manomaticamente tabla por tabla? (pienso yo.... ..... no se)

Duro trabajo ya que como digo, la BD contiene mas de mil tablas

Un Cordial Saludo
  #4 (permalink)  
Antiguo 14/09/2007, 02:22
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Es posible exp de solo datos?

Antes que nada ¿ has probado a hacer un alter table mi_tabla modify campo_varchar2 char(x) ?
  #5 (permalink)  
Antiguo 14/09/2007, 06:47
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Re: Es posible exp de solo datos?

Buen dia jc3000

En principio si deja hacer el alter.... Ahora me tocara recorrer tabla por tabla y donde encuentre un varchar2 hacerle un alter.....

Sera por programa?

Un Cordial Saludo
  #6 (permalink)  
Antiguo 14/09/2007, 09:08
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Es posible exp de solo datos?

Te ahogas en un vaso de agua, tio. Fabricate un script que te cree los alters.
A ver, que hay que dartelo todo hecho, create un sql que tenga esto :
Set head off
Set feedback off
Spool c:\mis_alters.sql

SELECT
'ALTER TABLE'‘
||TABLE_NAME
||' MODIFY '
||COLUMN_NAME
||' CHAR('
||DATA_LENGTH
||');'
FROM ALL_TAB_COLUMNS
WHERE DATA_TYPE = 'VARCHAR2'
AND OWNER = 'TU_USUARIO'
/

spool off

Y ya tienes tus alters de tus 1000 tablas con un simple sql.

Hay que ser imaginativo. Y no te acostumbres, que yo no tengo la costumbre de dar todo hecho, pero bueno........
  #7 (permalink)  
Antiguo 14/09/2007, 09:18
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Re: Es posible exp de solo datos?

Mil Gracias jc3000

y diculpa la falta de ignorancia mia....

Un Cordial Saludo
  #8 (permalink)  
Antiguo 14/09/2007, 11:53
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Re: Es posible exp de solo datos?

mmmm...... mientras la tabla no este siendo referenciada por otra...... me canciona
  #9 (permalink)  
Antiguo 14/09/2007, 13:04
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Es posible exp de solo datos?

Lo primero : NO TE DISCULPES POR NO SABER COMO AFRONTAR UN PROBLEMA. Nadie nace sabiendo, tio. Y es bueno preguntar , siempre que aprendas de lo que te digan.

De lo otro , como no estoy en el curro, no puedo mirarlo y no estoy seguro, pero lo mismo si puedes hacerlo aunque existan fk's , y si no puedes ¿ que tal si pones a disable todas las fk's o las borras y luego las creas de nuevo ?

Nos vemos
  #10 (permalink)  
Antiguo 14/09/2007, 13:38
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Re: Es posible exp de solo datos?

Hola jc3000... de nuevo yo.... pero esta vez para dar algo de solucion a este lio

Atendiendo tu SUGERENCIA de deshabilitar los fk de las tablas... me puse en la tarea de hacer este script

Código PHP:
set def on ver off
set serverout on size 1000000
prompt Digite dueno de la tabla
accept Tabowner prompt 
'OWNER: '
prompt Digite separado por comas (,) y en MAYUSCULAS la lista de tablastTAB1,TAB2,...
accept TabList prompt 'Table list: '
prompt Accion a ejecutar ENABLEDISABLEENABLE NOVALIDATE ... ):
accept State prompt 'State: '


spool enable_disable_fk.log
declare
l_str_sel_cur varchar2(4000);
l_str_sql_ddl varchar2(4000);
l_owner dba_constraints.owner%TYPE;
l_constraint_name dba_constraints.constraint_name%TYPE;
l_table_name dba_constraints.table_name%TYPE;
type t_cur_fk is ref cursor;
cur_fk t_cur_fk;

begin
l_str_sel_cur
:= 'select fk.owner, fk.constraint_name , fk.table_name ' ||
' from dba_constraints fk, dba_constraints pk ' ||
' where fk.CONSTRAINT_TYPE = ''R'' and ' ||
' pk.owner = upper(''&&Tabowner'') and ' ||
' fk.R_CONSTRAINT_NAME = pk.CONSTRAINT_NAME and ' ||
' pk.TABLE_NAME in ( ' ||
'''' || replace('&&TabList',',',''',''') || '''' ||
')';
open cur_fk for l_str_sel_cur;
dbms_output.put_line('Executing: ');
loop
fetch cur_fk into l_owner
l_constraint_namel_table_name;
exit 
when cur_fk%notfound;
l_str_sql_ddl := 'ALTER TABLE '||l_owner||'.'||l_table_name||' MODIFY CONSTRAINT '||l_constraint_name||' &&State';
dbms_output.put_line(l_str_sql_ddl);
execute immediate l_str_sql_ddl;
end loop;
if 
cur_fk%rowcount 0 then
dbms_output
.put_line('No Foreign key to modify');
end if;
close cur_fk;
end;
/

spool off 
jejeje..... Doy lo que sea si me la creites..... en verdad lo saque de la siguiente pagina http://www.oracle.com/technology/ora...05/090505.html

Igual, agradezco su colaboracion y sus ideas.....


Un Cordial Saludo
  #11 (permalink)  
Antiguo 14/09/2007, 15:05
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: Es posible exp de solo datos?

Eso está bien, pero mira, esto es mas facil.

SELECT 'ALTER TABLE '
||TABLE_NAME
||' MODIFY CONSTRAINT '
||CONSTRAINT_NAME
||' DISABLE;'
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='R';

Mandas el resultado a un spool y a tirar millas, luego para activarlas, cambias el DISABLE por ENABLE y ya está
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:14.