2010-01-19 11 views
127

Tengo una restricción llamada users.SYS_C00381400. ¿Cómo encuentro cuál es esa restricción? ¿Hay alguna forma de consultar todas las restricciones?Oracle encuentra una restricción

+0

saben cómo restricción? users.SYS_C00381400 – Vinay

+0

El nombre de la restricción apareció en un mensaje de error. –

Respuesta

195
select * from all_constraints 
where owner = '<NAME>' 
and constraint_name = 'SYS_C00381400' 
/

Al igual que todos los datos vistas del diccionario, esto unas USER_CONSTRAINTS ver si lo que desea revisar su esquema actual y una vista DBA_CONSTRAINTS para los usuarios de la administración.

La construcción del nombre de restricción indica un nombre de restricción generado por el sistema. Por ejemplo, si especificamos NOT NULL en una declaración de tabla. O, de hecho, una clave primaria o única. Por ejemplo:

SQL> create table t23 (id number not null primary key) 
    2/

Table created. 

SQL> select constraint_name, constraint_type 
    2 from user_constraints 
    3 where table_name = 'T23' 
    4/

CONSTRAINT_NAME    C 
------------------------------ - 
SYS_C00935190     C 
SYS_C00935191     P 

SQL> 

'C' para la comprobación, 'P' para primaria.

En general, es una buena idea dar a las restricciones relacionales un nombre explícito. Por ejemplo, si la base de datos crea un índice para la clave principal (lo que hará si esa columna no está ya indexada) usará el nombre de restricción o nombre del índice. No desea una base de datos llena de índices con el nombre SYS_C00935191.

La mayoría de las personas no se molestan en nombrar restricciones NO NULAS.

19

Para obtener una descripción más detallada (que hace referencia la tabla/columna qué tabla/columna) que puede ejecutar la siguiente consulta:

SELECT uc.constraint_name||CHR(10) 
    ||  '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source 
    ,  'REFERENCES'||CHR(10) 
    ||  '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column 
FROM user_constraints uc , 
    user_cons_columns ucc1 , 
    user_cons_columns ucc2 
WHERE uc.constraint_name = ucc1.constraint_name 
AND uc.r_constraint_name = ucc2.constraint_name 
AND ucc1.POSITION  = ucc2.POSITION -- Correction for multiple column primary keys. 
AND uc.constraint_type = 'R' 
AND uc.constraint_name = 'SYS_C00381400' 
ORDER BY ucc1.TABLE_NAME , 
    uc.constraint_name; 

De here.

4

tal vez esto puede ayudar ..

SELECT constraint_name, constraint_type, column_name 
from user_constraints natural join user_cons_columns 
where table_name = "my_table_name"; 
Cuestiones relacionadas