SoloCodigo

Bases de Datos => Oracle => Mensaje iniciado por: lcauso en Jueves 24 de Noviembre de 2005, 17:51

Título: Eliminar Constraint
Publicado por: lcauso en Jueves 24 de Noviembre de 2005, 17:51
Hola:
  Necesito crear un script para un usuario que elimine una constraint cuyo nombre ha sido generado por el sistema (SYS_0000123) que yo desconozco y que el usuario no puede mirar.

Intento coger el nombre de la constraint de las tablas del usuario, almacenarla en una variable y despues se la paso como parametro al ALTER TABLE mediante un ECXECUTE IMMEDIATE, pero me funciona

¿Alguien se le ocurre como hacerlo?

Muchas gracias por todo
Título: Re: Eliminar Constraint
Publicado por: JuanK en Jueves 24 de Noviembre de 2005, 17:57
necesito mas info, de todas maneras revisa que no va y sea solo un not null.
Título: Re: Eliminar Constraint
Publicado por: lcauso en Jueves 24 de Noviembre de 2005, 18:10
Lo que quiero es eliminar una restriccion de valores. La columna de la tabla tiene creada una restriccion del tipo:
              col1    char(3) NOT NULL   CHECK (col1 in ('ABC','XYZ'))

por lo que cuando se crea el sistema le da el nombre SYS_0000123

Mediante la tabla USER_CONSTRAINTS o USER_CONS_COLUMN llego a saber las constraint que tiene definidas la columna que son dos (una por el NOT NULL y otra por la restriccion de valores), pero no sé como eliminarlas.

¿Se te ocurre alguna idea?

Gracias
Título: Re: Eliminar Constraint
Publicado por: lcauso en Viernes 25 de Noviembre de 2005, 11:38
Hola de nuevo:
   se me ha ocurrido una forma pero tengo un problema.

Yo creo un script PRIMERO.sql con las siguientes sentencias
      DECLARE
            variable1   VARCHAR2(30);
      BEGIN
           SELECT CONSTRAINT_NAME INTO variable 1 FROM USER_CONSTRAIT  WHERE....
           @@prueba2.sql variable1;
END;
/

Donde el script de prueba2.sql tiene la sentencia ALTER para eliminar la constraint que le paso como parametro mediante variable1 con la sentencia:
      ALTER TABLE tabla1 DROP CONSTRAINT &1;

Mi problema es que no me coge el valor de variable1 sino el literal variable1.

¿Sabeis como lo puedo hacer?

Gracias
Título: Re: Eliminar Constraint
Publicado por: JuanK en Viernes 25 de Noviembre de 2005, 16:06
incluye esto:

EXECUTE IMMEDIATE 'ALTER TABLE TABLA1 DROP CONSTRAINT '||variable1
Título: Re: Eliminar Constraint
Publicado por: lcauso en Lunes 28 de Noviembre de 2005, 09:51
El EXECUTE IMMEDIATE no me ha funcionado, he tenido que hacerlo mediante un prepare de la siguiente manera (el script prueba2.sql al que llamo es de la siguiente manera):

   DECLARE
    sql_stmt   VARCHAR2(100);
   BEGIN
      sql_stmt:='ALTER TABLE tabla1 DROP CONSTRAINT '||&1;
      EXECUTE IMMEDIATE sql_stmt;
   END;

Muchas gracias
Título: Re: Eliminar Constraint
Publicado por: lcauso en Lunes 28 de Noviembre de 2005, 10:48
esta sentencia tambien me vale

EXECUTE IMMEDIATE 'ALTER TABLE TABLA1 DROP CONSTRAINT '||variable1

No sé que había echo antes.
Título: Re: Eliminar Constraint
Publicado por: wGandalf en Martes 29 de Agosto de 2006, 14:59
para mi uso asi deshabilito las constraint tarde pero puede que te ayude a vos o a alguien.
sto_catalogo cambialo por la tabla que queres.
saludos desde argentina.

select 'ALTER TABLE '||table_name||'  DISABLE CONSTRAINT '||constraint_name||' ;'
  from user_constraints
  where r_constraint_name in (
  select constraint_name from user_constraints where table_name
  = 'STO_CATALOGO')