بتاريخ: 13 يناير 200719 سنة comment_89149 declare e_emp_remain exception; pragma exception_init(e_emp_remain,-02292); begin delete from departments where department_id=10; exception when e_emp_remain then DBMS_OUTPUT.PUT_LINE('Cannot remove dept with employees in'); end; هذا الكود بع تعريف لـــ Exception المفروض ان delete from departments where department_id=10;يقوم بحذف القسم رقم 10 لكن القسم رقم 10 به موظفين فلا يمكن حذفه ... و لكن الكود يعمل تمام و لا كأن في خطأ كان بيتم و شوفو نتيجة تشغيل الكود , غريبة!!!!!!!! هنا تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة comment_89163 السلام عليكم ألاخ الكريم الكود ليس به اي مشكلة او خطأ و هو سليم و لكن اذا كنت تنفذ هذا الكود و يقوم فعلا بحذف الإدارة فالسبب إما 1-لا يوجد constraint العلاقة بين جدول department and emp و ذلك سيكون صحيحا لو تم حذف الادارة و لكن الموظفين مازالوا موجودين 2- السبب الثاني اذا كان الconstraint موجودا هو ان يكون معرف مع وجود قاعدة الحذف ON DELETE CASCADE أو قاعدة الحذف ON DELETE SET NULL و في هذه الحالة اذا كانت الاولي فسيتم حذف الموظفين مع الادارة و يجب عليك إزالة الCONSTRAINT و عمله مرة اخري بدون اي قواعد للDELETE و في الحالة الثانية ستجد الموظفين موجودين و لكن رقم الادارة ب NULL 3- السبب الثالث هو انه كل شئ يعمل بالفعل و لكن و انه يوجد CONSTRAINT يمنع حذف الإدارة اذا كان بها موظفين و لكن الرسالة لا تظهر بسبب عدم تشغيل البارمتر SERVEROUTPUT عن طريق تشغيل الأمر SET SERVEROUTPUT ON في الSQLPLUSو هذا مثال حتي تتأكد من أن الكود يعمل بشكل صحيح SQL> declare 2 e_emp_remain exception; 3 pragma exception_init(e_emp_remain,-02292); 4 begin 5 delete from dept where deptno=20; 6 exception 7 when e_emp_remain then 8 DBMS_OUTPUT.PUT_LINE('Cannot remove dept with employees in'); 9 end; 10 / Cannot remove dept with employees in تم بنجاح إجراء PL/SQL SQL> select * from dept where deptno=20; DEPTNO DNAME LOC ---------- -------------- ------------- 20 RESEARCH DALLAS SQL> select * from emp where deptno =20; EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- ---------- ---------- ---------- DEPTNO ---------- 7369 SMITH CLERK 7902 17-12-1980 800 20 7566 JONES MANAGER 7839 02-04-1981 2975 20 7788 SCOTT ANALYST 7566 19-04-1987 3000 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ---------- ---------- ---------- ---------- DEPTNO ---------- 7876 ADAMS CLERK 7788 23-05-1987 1100 20 7902 FORD ANALYST 7566 03-12-1981 3000 20 أعتقد انه تم توضيح كل الحالات الممكنة بالتوفيق تم تعديل 13 يناير 200719 سنة بواسطة hanon_OCP تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة كاتب الموضوع comment_89175 تمام , لقد توصلت الي الحل , شكرا لك صديقى تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة comment_89188 السلام عليكم العفو يا باشا و لكن ارجو توضيح اي حالة من الحالات السابقة التي حدثت معك ليستفيد من يقرا الموضوع لاحقا بالتوفيق تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة كاتب الموضوع comment_89194 الخطأ كان فى اضافة جملة SET SERVEROUTPUT ON تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.