• Domingo 28 de Abril de 2024, 23:05

Autor Tema:  Eliminar Constraint  (Leído 8242 veces)

lcauso

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Eliminar Constraint
« en: Jueves 24 de Noviembre de 2005, 17:51 »
0
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

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminar Constraint
« Respuesta #1 en: Jueves 24 de Noviembre de 2005, 17:57 »
0
necesito mas info, de todas maneras revisa que no va y sea solo un not null.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lcauso

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Eliminar Constraint
« Respuesta #2 en: Jueves 24 de Noviembre de 2005, 18:10 »
0
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

lcauso

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Eliminar Constraint
« Respuesta #3 en: Viernes 25 de Noviembre de 2005, 11:38 »
0
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

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Eliminar Constraint
« Respuesta #4 en: Viernes 25 de Noviembre de 2005, 16:06 »
0
incluye esto:

EXECUTE IMMEDIATE 'ALTER TABLE TABLA1 DROP CONSTRAINT '||variable1
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

lcauso

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Eliminar Constraint
« Respuesta #5 en: Lunes 28 de Noviembre de 2005, 09:51 »
0
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

lcauso

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Eliminar Constraint
« Respuesta #6 en: Lunes 28 de Noviembre de 2005, 10:48 »
0
esta sentencia tambien me vale

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

No sé que había echo antes.

wGandalf

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Eliminar Constraint
« Respuesta #7 en: Martes 29 de Agosto de 2006, 14:59 »
0
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')