programmera.net -> oracle -> normal för utskrift | info@programmera.net |
USER_CONS_COLUMNS
1. USER_CONS_COLUMNS 2. Exempel |
1. USER_CONS_COLUMNS
Tabellen USER_CONS_COLUMNS beskriver vilka kolumner som är inblandade i en restriktion. Varför visas inte kolumnens namn i USER_CONSTRAINTS? Jo för att vissa restriktioner spänner över flera kolumner i en tabell. Ett exempel är en primär nyckel som kan bestå av flera av tabellens kolumner. USER_CONS_COLUMNS har följande kolumner:
SQL> DESC USER_CONS_COLUMNS;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER
2. Exempel
Vi skapade tidigare två tabller; EMP och DEP med följande kolumner:
Vi tittar på raderna i USER_CONS_COLUMNS för dessa tabeller:
Vi kan kombinera vyn USER_CONS_COLUMNS med USER_CONSTRAINTS för att även se restriktionens typ:
SQL> SELECT * FROM user_cons_columns ORDER BY constraint_name;
OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
--------------- -------------------- -------------------- -------------------- ----------
APP1 CONS_FK_EMP_DEP EMP DEP_PK 1
APP1 CONS_PK_DEP DEP DEP_PK 1
APP1 CONS_PK_EMP EMP EMP_PK 1
APP1 SYS_C005311 EMP FIRST_NAME
APP1 SYS_C005312 EMP LAST_NAME
APP1 SYS_C005313 DEP DEP_NAME
6 rows selected.
SQL>
SELECT a.constraint_name, a.constraint_type, a.table_name, b.column_name
FROM user_constraints a, user_cons_columns b
WHERE a.constraint_name = b.constraint_name
ORDER BY a.constraint_name;
CONSTRAINT_NAME C TABLE_NAME COLUMN_NAME
-------------------- - -------------------- --------------------
CONS_FK_EMP_DEP R EMP DEP_PK
CONS_PK_DEP P DEP DEP_PK
CONS_PK_EMP P EMP EMP_PK
SYS_C005311 C EMP FIRST_NAME
SYS_C005312 C EMP LAST_NAME
SYS_C005313 C DEP DEP_NAME
6 rows selected.