اوراکل اپکس-Unique Constraint با شرط در اوراکل

 

Unique Constraint با شرط در اوراکل

 

چگونه می توان  Unique Constraint با شرط در اوراکل ایجاد کرد؟ در این خصوص دو روش پیشنهاد می شود که در زیر توضیحات آن داده می شود.
روش اول
فرض مي كنيم كه شما دوفيلد در جدول خود داريد كه بايد مقادير اين دوفيلد بصورت يكتا باشد به شرطي كه مقادير فيلد ديگر شامل يك مجموعه اي از اطلاعات باشد و در غير اينصورت نه.
براي درك بهتر با مثال مطرح مي شود:
يك جدول در اوراکل داريد كه شامل سه فيلد f1,f2,f3 مي باشد . حال مي خواهيد اگر مقادير فيلد f1 شامل (1و2و3 ) بود فيلد f2, f3 بصورت يكتا Unique باشد
create table test
(
f1 number
,f2 varchar2(50)
,f3 number(11)
);
اضافه كردن يك unique function-based index در اوراکل
create unique index test_idx
on test (
case when f1 in (1, 2, 3) then f2
end,
case when f1 in (1, 2, 3) then f3
end
);
حال دو تا حالت بوجود مي آيد:
  • اول Null,null وقتي كه مقدار فيلد f1 شامل (1, 2, 3) نباشد يعني اينكه حالت يكتا بودن غيرفعال مي شود.
  • دوم مقدار فيلد f2,f3 وقتي كه فيلد f1 شامل (1, 2, 3) باشد يعني اينكه حالت كنترل يكتا بودن فعال مي شود.
نکته: مقادير null,null در Index ظاهر نمي شوند و وقتي كه ديتا وجود داشته باشد در Index ظاهر مي گردد.
مي توانيد با مقادير زير اين موضوع را چك نماييد.
4,’saeed’,15000
3,’armin’,14000
2,’saeed’,10000
4,’saeed’,15000
3,’armin’,14000 ===در اين حالت فعال مي شود و خطاي يكتايي ظاهر مي گردد
ORA-00001: unique constraint (TEST.TEST_IDX) violated
روش دوم
در روش اول اين مسئله را بوسيله unique function-based index در اوراکل حل كرديم. حال در اين قسمت مي خواهيم كه بوسيله virtual columns در اوراکل اين كنترل را ايجاد كنيم.
در اين روش از يك Constraint واقعي استفاده مي كنيم. بدين منظور دوتا فيلد به جدول ايجاد مي كنيم بصورت زير:
alter table test
add (f2_unq varchar2(50 byte) generated always as ((case when f1 in (1, 2, 3) then f2 end)));
alter table test
add (f3_unq number(11 byte) generated always as ((case when f1 in (1, 2, 3) then f3 end)));
حال بايد يك Unique Constraint در اوراکل بر روي آن دو فيلدي جديد كه ايجا كرديم بسازيم.
alter table test
add constraint f2_f3_unique
unique (f2_unq,f3_unq);
كار ما به اتمام رسيده است و مي توانيد با مقادير مثال قبلي آن را چك كنيد.
امیدوار هستم مورد استفاده دوستان قرار گیرد.
5/5 - (1 امتیاز)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

keyboard_arrow_up
Oracle APEX Capabilities (OAC)