Problem:
Du vil kende standardnavnene på begrænsninger i en tabel i Oracle.
Eksempel:
I vores database opretter vi to tabeller, country og student , med følgende begrænsninger:PRIMARY KEY (kolonne-id'et i tabellerne country og student ), FOREIGN KEY (kolonnen country_id i tabellen student ), DEFAULT (kolonnen name i tabellen student ), UNIQUE (kolonnen name i tabellen country og kolonnen personal_number i tabellen student ), og CHECK (kolonnen age i tabellen student ).
Løsning:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) DEFAULT 'UNKNOWN', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Lad os vise, hvordan Oracle navngiver disse tabellers begrænsninger som standard. Brug denne forespørgsel til at se dem:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Her er resultatet:
| CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
|---|---|---|
| SYS_C007376 | R | STUDENT |
| SYS_C007366 | P | LAND |
| SYS_C007374 | P | STUDENT |
| SYS_C007367 | U | LAND |
| SYS_C007375 | U | STUDENT |
| SYS_C007372 | C | STUDENT |
Diskussion:
Når vi opretter vores tabeller, sætter vi begrænsninger for nogle kolonner. Vi angiver dog ikke navnene for disse begrænsninger, så de navngives som standard. Hvordan genereres standardnavnene for begrænsninger?
I Oracle starter standardbegrænsningsnavnet med brugernavnet efterfulgt af '_C ’ og et løbenummer. Begrænsningstyperne er 'C ’ (check ), ‘P ' (primær nøgle), 'U ' (unik begrænsning) og 'R ' (fremmed nøgle). Alle standard begrænsningsnavne genereres som 'SYS ', '_ ’, og nummeret. Du kan se standardnavnene i tabellen ovenfor. For eksempel CHECK begrænsning for kolonnealderen i student tabellen har navnet SYS_C007372 .