Pregunta

Estoy haciendo alguna migración masiva de una gran base de datos de Oracle. El primer paso de este cambio de nombre implica una carga completa de tablas como una preparación para dejarlos caer más tarde (pero tengo que mantener los datos en ellos alrededor de momento). Cualquier restricción de clave externa en ellos necesitan ser disminuido - no deben estar conectados con el resto de la base de datos en absoluto. Si estuviera soltándolos ahora podía cascada de restricciones, pero simplemente cambiar el nombre altera las restricciones.

¿Hay alguna manera de soltar todas las limitaciones que las restricciones CASCADE bajarían sin perder la propia mesa?

¿Fue útil?

Solución

Puede hacerlo con SQL dinámico y el diccionario de datos:

begin
    for r in ( select table_name, constraint_name
               from user_constraints
               where constraint_type = 'R' )
    loop
        execute immediate 'alter table '|| r.table_name
                          ||' drop constraint '|| r.constraint_name;
    end loop;
end;

Si las tablas son propiedad de más de un usuario que tendrá que conducir desde DBA_CONSTRAINTS e incluir un e-mail en la proyección y la instrucción ejecutada. Si quieres tocar menos de la totalidad de las mesas me temo que tendrá que especificar la lista en la cláusula WHERE, a menos que haya algún patrón a sus nombres.

Otros consejos

Se puede desactivar / vuelva a habilitar las restricciones sin dejarlos caer. Echar un vistazo a este artículo .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top