الانتقال إلى المحتوى

with check option


trust_words

Recommended Posts

السلام عليكم ورحمة الله جميعا
اثناء دراستي للSQL واجهتني عبارة الـ with check option في موضوع الـDML
وخصوصا الـ insert statement . الواقع انا قرأت انها تمنع أي تغييرات في أي عمود غير موجود في الـsubquery المستخدمة في جملة الادخال, ولكني لم افهم ذلك,كيف يمكن تغيير اعمدة ليست مذكورة في subquery اصلا ؟؟ فضلا عن كيفية الجماية من هذه التغييرات !؟؟ هذا مقطع مثال من الـ sql reference حصلت عليه بعد البحث في الانترنت والكتاب التي لدي .. ولكن لم اجد التفصيل الذي اريد ه حتى افهمها جيدا :


WITH CHECK OPTION Example
The following statement is legal even though the second value violates the condition of the subquery where_clause:

INSERT INTO
(SELECT employee_id, last_name, email, hire_date, job_id, salary
FROM employees WHERE department_id < 10)
VALUES (99999, 'Taylor', '[email protected]',
TO_DATE('07-JUN-99', 'DD-MON-YY'), 'PU_CLERK', 5000);


However, the following statement is illegal because it contains the WITH CHECK OPTION clause:

INSERT INTO
(SELECT employee_id, last_name, email, hire_date, job_id, salary
FROM employees WHERE department_id < 10 WITH CHECK OPTION)
VALUES (99999, 'Taylor', '[email protected]',
TO_DATE('07-JUN-99', 'DD-MON-YY'), 'PU_CLERK', 5000);
insert into
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
افيدوني بارك الله فيكم
رابط هذا التعليق
شارك

السلام عليكم ..
نوع الخطأ كما تلاحظ فى رسالة الاوراكل خاص باوامر الView
ارفق اقتباس شرح للView فيما يخص الامر with check option


Using the WITH CHECK OPTION Clause
You can ensure that DML on the view stays-
within the domain of the view by using the
WITH CHECK OPTION clause.

SQL> CREATE OR REPLACE VIEW empvu20
 AS SELECT      *
 FROM emp WHERE deptno = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck;



View created

Any attempt to change the department -
number for any row in the view will fail
because it violates the WITH CHECK OPTION
constraint.

Using the WITH CHECK OPTION Clause-
It is possible to perform referential integrity checks through views. You can also enforce constraints
at the database level. The view can be used to protect data integrity, but the use is very limited.
The WITH CHECK OPTION clause specifies that INSERTS and UPDATES performed through the
view are not allowed to create rows that the view cannot select, and therefore it allows integrity
constraints and data validation checks to be enforced on data being inserted or updated.
If there is an attempt to perform DML operations on rows that the mow has not selected, an error is
displayed, with the constraint name if that has been specified

SQL> UPDATE empvu20
SET    deptno = 10
WHERE einpno = 7788;



update empvu20
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation

رابط هذا التعليق
شارك

اسلام عليكم ..
استكمال للشرح

Note: No rows are updated because if the department number were to change to 10. the view would no longer be able to see that employee Therefore, with the WITH CHECK OPTION clause, the view can see only department 20 employees and does not allow the department number for those employees to be changed through the view

.

رابط هذا التعليق
شارك

بارك الله فيك يا اخ امجد
ولكنني عندما قرات عنها لم يتم الاشارة بشكل او باخر الى الـ vew اثناء الكلام عن هذه الجملة,فقط انها تستخدم في جمل الDML (data manipulate lang
) وبالذات عندما نستخدم جملة فرعية(subquery) في عملية تحديث او ادخال...؟!
اذا ممكن مثال مشروح بالعربي..وبارك الله فيك مرة اخرى

رابط هذا التعليق
شارك

السلام عليكم ..
استخدام الsubquery مع ال insert .. فى هذه الحالة لايتم استخدام اسم الجدول ولكن يستبدل بمكونات الsubquery مع تحديد الحقول التي سيتم ادخال القيم بها .
الشرط الاساسي لتنفيذ هذه الطريقة هو تساوي عدد الحقول مع ال subquery ومع امر insert وايضا الترتيب .
طبعا شروط التعامل مع الجدول لابد من تحققها مع امر الادخال مثل وجود حقل الprimary key او ترك حقل اجباري بدون اسناد قيمة له not null . او تكرار الPrimary key .

مع استخدام امر with check option سيتم التأكد من تحقيق الشروط الموجودة مع امر الwhere
تلاحظ فى مثالك الثاني لم يتم ذكر حقل رقم الادارة ضمن حقول الادخال . ليست ضمن حقول الselect وايضا ليست ضمن حقول الinsert وفى هذه الحالة سيتم تحريك Null فى حقل رقم الادارة وفى نفس الوقت لن يتحقق شرط الselect بأن يكون رقم الادارة اقل من 10 .
وفى هذه الحالة تظهر رسالة خطأ انه امر الادخال لا يتناسب مع شروط subquery .

ORA-01402: view WITH CHECK OPTION where-clause violation

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

السلام عليكم ورحمة الله وبركاته،،
i am sorry for long disconnection, but does this "with check option "is for one case!? idont think so, so that i just want u to help me by many examples in other cases. :(

رابط هذا التعليق
شارك

  • بعد 2 سنة...
  • بعد 1 شهر...

أخى العزيز
WITH CHECK OPTION تتأكد من أن البيانات التى سوف تدخلها إلى الجدول تكون هى التى تم إستخدامها فى WHERE ولكن يلاحظ لا تستخدم DEFAULT عند الإدخال عن طريق الVIEW
يمكنك إعتبار الVIEW هى عبارة عن جدول ولكن ليس جدول فعلى ولكنة عبارة عن نافذة تنظهر إلى جزء معين من الجدول و WITH CHECK OPTION تجعل VIEW تنظر إلى هذا الجزء من الجدول فقط ولا يمكن الأضافى إلى اى جزء أخر منه
شكرا ....

تم تعديل بواسطة mahmoudwow
رابط هذا التعليق
شارك

اخى امجد لقد قرأت شرحك وهو جميل لكن لم تصل الى فائدة عبارة with check option
لان ما قلته من مراعاة الشروط سواء كتبنا عبارة with check option او لم نكتبها سيقوم الاوراكل بمراعاة هذه الشرط عند عمل اى ادخال للبيانات فى الجدول لكن ما نريد فهمه ما هى فائدة هذه العباره فى الجمله هل وجودها خاص بالقيوم انه لا يتم المساس بها ام وجودها خاص بعدم تغيير اى بيانات خارج عبارة subquery
واذا كان هذا صحيح فكيف يتم تغيير بيانات لم نذكرها اصلا ولم ندخلها فى الموضوع
ارجو افادتنا

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله

هذا الامر with check option يعنى انه لابد من الالتزام بتفيذ الشرط الموجود

اولا :
مع امر الادخال insert

ففى السؤال الاول للأخ السائل .. مع امر الادخال insert باستخدام الsub query

لايمكن اضافة سجل جديد الا بوجود معلومة رقم الادارة هذا اولا .....
وثانيا يجب ان تكون قيمتها اصغر من 10 حسب الشرط

ثانيا :
مع مثال ال view و محاولة التعديل بامر update

تم انشاء ال view بناء على شرط معين .. وهو ان الاداره = 20

فلن يسمح بتغيير الادارة لاي من الموظفين العاملين باداره 20

ارجوا ان تكون الفكرة اتضحت ..

فى انتظار استفساراتك

تم تعديل بواسطة Amgad
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية