الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

ما الخطأ هنا

Featured Replies

بتاريخ:

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 به موظفين فلا يمكن حذفه ... و لكن الكود يعمل تمام و لا كأن في خطأ كان بيتم


و شوفو نتيجة تشغيل الكود , غريبة!!!!!!!! هنا

بتاريخ:

السلام عليكم

ألاخ الكريم
الكود ليس به اي مشكلة او خطأ و هو سليم

و لكن اذا كنت تنفذ هذا الكود و يقوم فعلا بحذف الإدارة فالسبب إما
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																	  
																			



أعتقد انه تم توضيح كل الحالات الممكنة :rolleyes:
بالتوفيق

تم تعديل بواسطة hanon_OCP

بتاريخ:
  • كاتب الموضوع

تمام , لقد توصلت الي الحل , شكرا لك صديقى

بتاريخ:

السلام عليكم
العفو يا باشا
و لكن ارجو توضيح اي حالة من الحالات السابقة التي حدثت معك ليستفيد من يقرا الموضوع لاحقا :rolleyes:
بالتوفيق

بتاريخ:
  • كاتب الموضوع

الخطأ كان فى اضافة جملة
SET SERVEROUTPUT ON

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.