SoloCodigo
Bases de Datos => Oracle => Mensaje iniciado 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
-
necesito mas info, de todas maneras revisa que no va y sea solo un not null.
-
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
-
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
-
incluye esto:
EXECUTE IMMEDIATE 'ALTER TABLE TABLA1 DROP CONSTRAINT '||variable1
-
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
-
esta sentencia tambien me vale
EXECUTE IMMEDIATE 'ALTER TABLE TABLA1 DROP CONSTRAINT '||variable1
No sé que había echo antes.
-
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')