بتاريخ: 14 أغسطس 200520 سنة comment_44743 الاخوة الاعزاء : تحية طيبو وبعد........ارجو منكم شرح Using the EXCEPTIONS table لاني قد قرأتها من الكتاب ولم أفهمها ، ولم أفهم الهدف من أستخدامها.........الخ، تقديم بلاغ
بتاريخ: 14 أغسطس 200520 سنة comment_44748 الاخ الكريمتستخدم EXCEPTIONS ومعناها الاستثناء يعني ما يسمى ب elseاي في حال عدم تنفيذ جملة select او ارجعت قيمة nullمثلا ينفذ امر آخر في التقارير او الفورممثال select emp_name from employees exceptions when no_data_found then return(null); ??????هذا exceptions الذي نعرفه تقديم بلاغ
بتاريخ: 15 أغسطس 200520 سنة كاتب الموضوع comment_44851 الاخوة الاعزاء : ليس هذا أقصد ولكن الذي أقصده كما ورد في كتب Oracle DBA هو كما يلي :-1- Create the EXCEPTION table by running the utlexcpt1.sql script2- execute the ALTER TABLE statement with EXCEPTION option3- Use subquery on EXCEPTION to locate rows with invalid data4- Rectify the errors5- Reexcute ALTER TABLE to enable the constraintراجياً منكم شرح هذه الخطوات وما هي الفائدة من الEXCEPTION وشكراً جزيلاً لكم تقديم بلاغ
بتاريخ: 17 أغسطس 200520 سنة comment_45025 الاخ الكريملقد توصلت وبعد عناء الى الحل الذي تريد وان شاء الله يكون الحلما تسأل عنه يتعلق بما يسمىConstraint Violationوكيفية تعريف Violationحيث انك تريد ان تغير حالة constraint من disable الى enableومثلا يكون هذا ال constraint رئيسي primary key وكان معطل وتم ادخال بيانات على الجدول وقد تكون هذه البيانات مكررة وانت تعلم ان primary key لا يقبل المكرر فعند تفعيل ال primary key وبعد ان كان معطل يجب ان يتغاضى عن البيانات المكررة ويبدا التشييك من هذه اللحظة وهو ما يسمى بانتهاك الViolation constraint لذلك يستخدم في هذه الحالة ما يسمى ب exceptionsطبعا الاوراكل صنعت ملف جاهز يقوم هذا الجدول بحفظ ارقام rowid الحقول التي تم التعديل عليها بعد تغيير حالة ال constraint الى disable اي كرقيب لما تم التعديل عليه حيث يقوم بحفظ رقم الحقل واسم الجدول واسم المالك owner او ما يسمى ب schema واسم constraint وتجده على الامتداد oraclehome\ora92\rdbms\admin\utlexpt1وموجود داخل هذا الملف السكربت التالي create table exceptions(row_id urowid, owner varchar2(30), table_name varchar2(30), constraint varchar2(30)); حيث ينشئ جدول باسم exceptionsحيث تقوم بعمل التالي SQL> connect system/manager Connected. SQL> @e:\oracle\ora92\rdbms\admin\utlexpt1 Table created. هنا تعمل اظهاار لمحتويات الجدول exceptions SQL> DESCRIBE exceptions Name Null? Type -------------------------- ------- ---------------- ROW_ID ROWID OWNER VARCHAR2(30) TABLE_NAME VARCHAR2(30) CONSTRAINT VARCHAR2(30) لنفرض انك قمت بعملية disable ل constraint على الجدولكالتالي 1 alter table brower.emp 2* disable constraint emp_deptno_fk SQL> / Table altered. SQL> update brower.emp 2 set deptno=11 where deptno=10; 3 rows updated. هذا بالنسبة للنقطة الاولىالنقطة الثانية2. Execute the ALTER TABLE command using the EXCEPTIONS clause:هنا تستخدم exceptions في حال اردت التعديل على حالة ال constraintويفحص هل هذا ال constraint موجود ام غير موجودفي جدول ال exceptionsيعني المقصود من جدول ال exceptions هو جدول يحتوي على اسماء ال constraint التي تم التعديل عليها حيث يجب عليك اضافة اسم ال constraint و schema واسم الجدول كما كرت سابقاوحسب التالي ALTER TABLE [ schema. ] table ENABLE [validate] {CONSTRAINT constraint | PRIMARY KEY | UNIQUE ( column [, column ] ... ) } [ USING INDEX index_clause ] [ EXCEPTIONS INTO [ schema. ] table ] مثال توضيحي SQL> alter table brower.emp 2 enable validate constraint emp_deptno_fk 3 exceptions into system.exceptions; enable validate constraint emp_deptno_fk * ERROR at line 2: ORA-02298: cannot validate (BROWER.EMP_DEPTNO_FK) - parent keys not found اذا كان جدول exceptions غير موجد به اسم ل schema لهذا ال constraint فانه يضاف بعد التحديث تلقائيا ويجب عليك القيام بخطوة ال truncated اي مسح جميع البيانات بعد التعديل على exception او مسح كل ما يتعلق بهذا ال constraint بعد التعديل عليهلاحظ المثالمع شرح الباقي 3. Identify invalid data by using a subquery on the EXCEPTIONS table: 1 select rowid, empno, ename, deptno 2 from brower.emp 3 where rowid in (select row_id 4 from exceptions) 5* for update SQL> / ROWID EMPNO ENAME DEPTNO ------------------ -------- ---------- -------- AAABbvAADAAAABiAAA 7839 KING 11 AAABbvAADAAAABiAAC 7782 CLARK 11 AAABbvAADAAAABiAAN 7934 MILLER 11 Note: The for update locks the rows so no one else can change the rows 4. Correct the errors in the data: 1 update brower.emp 2 set deptno=10 3 where rowid in ( 4 'AAABbvAADAAAABiAAA', 5 'AAABbvAADAAAABiAAC', 6* 'AAABbvAADAAAABiAAN') SQL> / 3 rows updated. SQL> commit; Commit complete. 5. Truncate the EXCEPTIONS table and reenable the constraint: SQL> truncate table system.exceptions; Table truncated. SQL> alter table brower.emp 2 enable validate constraint emp_deptno_fk 3 exceptions into system.exceptions; Table altered. ارجو ان لا اكون قد اطلت بالشرح ولكن خلاصة الفكرة ان الاوراكل عملت جدول اسمه exceptions تستطيع ان تستخدمه لحل مشاكل ما بعد ايقاف ال constraintحيث يحصر البيانات التي تم التعديل عليهاواسف على الاطالةوهذا ما تم التوصل اليه تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.