Въведение
Ограничение за проверка на Oracle се използва за налагане на правила за интегритет, базирани на логически изрази, като сравнения. Използваните логически изрази трябва да връщат булева стойност.
Пример
Ограничение ПРОВЕРКА на заплатите на служителите, така че нито една стойност на заплатата да не е по-голяма от 100 000.
Ограничение ПРОВЕРКА за местоположенията на отделите, така че само местоположенията „DELHI“, „PATNA“ и „MUMBAI“ са разрешени.
Как работи ограничението за проверка на Oracle
- Определяте ограниченията за проверка на колоната в таблица. Ограниченията за проверка са логически изрази, които се оценяват на булева стойност true или false
- Когато редовете се вмъкват или актуализират в таблицата, Oracle проверява логическите изрази.
- Ако е оценено на True, Oracle приема данните и ги пренася напред с вмъкване или изтриване.
- Ако оценката е фалшива, Oracle отхвърля данните
Важни точки относно ограничението за проверка
а. Ограничението за проверка може да бъде създадено върху колона или група от колони.
б. Една колона може да има едно или повече ограничения за проверка.
c. Редът, в който се оценяват ограниченията, не е дефиниран
d. Никога не използвайте CHECK ограничения, когато някой от другите типове ограничения за целостта може да осигури необходимата проверка.
e. Когато дефинирате множество ограничения, уверете се, че те не са в конфликт помежду си
Проверете ограниченията на ограниченията
(1) Условието трябва да бъде булев израз, който може да бъде оценен с помощта на стойностите в реда, който се вмъква или актуализира.
(2) Условието не може да има
a. подзаявки или последователности.
b. SYSDATE, UID, USER или USERENV SQL функции.
c. псевдоколони LEVEL, PRIOR или ROWNUM.
d. дефинирана от потребителя SQL функция.
(3) Ограничение за проверка не може да препраща към колони в други таблици
(4) Ограничение за проверка не може да бъде създадено в изглед на оракул
Как да създадете ограничението за проверка в oracle
Ограниченията за проверка на Oracle могат да бъдат създадени с клаузата за създаване на таблица или след като таблицата е била създадена с клауза alter table.
Сега със създаването на таблица, ограниченията за проверка могат да бъдат създадени в синтаксис на колона на линия или извън линия синтаксис.
вграден синтаксис
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) check(SAL > 1000), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ); Table created.
Можем да дадем и персонализирано име на ограничението за проверка
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ); Table created.
синтаксис извън линия
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), check(SAL > 1000) ); Table created.
Можем да дадем и персонализирано име на ограничението за проверка
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), constraint CHECK_SAL check(SAL > 1000) ); Table created.
Когато са включени няколко колони, ние използваме синтаксис само извън линия
Ако използвате вграден синтаксис, той ще изведе грешка
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null), "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ); "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null), * ERROR at line 7: ORA-02438: Column check constraint cannot reference other columns SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"), constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null) ); Table created.
Сега може да се добави ограничение за проверка, след като таблицата е създадена с помощта на синтаксиса на таблицата alter
SQL> CREATE TABLE "EMP" ("EMPNO" NUMBER(4,0), "ENAME" VARCHAR2(10), "JOB" VARCHAR2(9), "MGR" NUMBER(4,0), "HIREDATE" DATE, "SAL" NUMBER(7,2) , "COMM" NUMBER(7,2), "DEPTNO" NUMBER(2,0), CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO") ); Table created. SQL> alter table "EMP" add constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null); Table altered.
Как да намеря ограничението за проверка на таблицата
Следвайки речника, изгледите съдържат информацията за ограничение
ALL_CONSTRAINTS
ALL_CONS_COLUMNS
USER_CONSTRAINTS
USER_CONS_COLUMNS
DBA_CONSTRAINTS
DBA_CONS_COLUMNS
SQL> column CONSTRAINT_NAME format a20 SQL> column SEARCH_CONDITION format a50 SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C';
Тук C означава ограничение на проверка
Как да активирам/деактивирам ограничението за проверка
SQL> alter table "EMP" disable constraint CHECK_SAL; Table altered. SQL> alter table "EMP" enable constraint CHECK_SAL; Table altered.
Как да премахнете ограничението за проверка
alter table "EMP" drop constraint CHECK_SAL; Table altered.
Пример за ограничения за проверка
col1 >= 0 AND col1 < 85857 user_override in ('Y','N') class = 0 OR class = 1 hwm > 0 cm = 0 OR cm = 1 SEQ >= 0 status = 0 OR status = 1
Също чете
alter table add primary key oracle :първичният ключ в oracle идентифицира уникално реда в таблицата. То не може да бъде нулево и може да бъде създадено по време на създаването на таблицата или след създаването на таблицата
ограничение не null в Oracle :ограничението не null в oracle се използва за налагане на ненулеви стойности в колоната в таблицата. Вижте как да добавяте, махнете нулевите ограничения
Уникален ключ в Oracle:Уникалният ключ налага уникалност в колоната в таблицата и ни помага да идентифицираме реда бързо. Oracle създава уникалния индекс за ключа, ако няма наличен индекс
премахване на ограничението на външния ключ oracle:Можем да премахнем ограничението в oracle, използвайки командата alter table. можем да махнем първичен, външен ключ, проверка, не нула и уникално ограничение със същата команда
команда delete в oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm
Препоръчани курсове
Ето хубавия курс на Udemy за Oracle SQL
Oracle-Sql-Step-by-step :Този курс обхваща основния sql, присъединяването, Създаването на таблици и промяната на структурата им, Създаване на изглед, Обединение, Обединение - всичко и много други неща . Страхотен курс и задължителен курс за SQL начинаещи
Пълният курс за сертифициране на Oracle SQL :Това е добър курс за всеки, който иска да бъде готов за работа за SQL разработчици. Приятно обяснен курс
Oracle SQL Developer:Основни неща, съвети и трикове :Инструментът за разработчици на Oracle Sql се използва от много разработчици. Този курс ни дава трикове и уроци как да го използваме ефективно и да станем продуктивен sql разработчик
Мастърклас за настройка на производителността на Oracle 2020 г. :Настройката на производителността е едно от критичните и най-търсените умения. Това е добър курс, за да научите за него и да започнете да правите настройка на производителността на sql