الانتقال إلى المحتوى
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.

لمعرفة الفراغات Sequence Gaps في الجدول

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله ،،
احتاج لمعرفة sequence gap ،، اي الفراغات الموجودة في الجدول (اي بين الارقام،،اذا كانت الارقم مثلا:1-2-3-6-7-9 ...الخ)احتاج ان يعطيني الارقام الساقطة لدي وهي (4-5-8)


بحثت فوجدت هذه الجمله :

SELECT measurement_id - gap gap_from, measurement_id - 1 gap_to FROM ( SELECT measurement_id, CASE measurement_id - NVL((LAG(measurement_id) OVER (ORDER BY measurement_id)),0) 
WHEN 1 THEN 0 
ELSE measurement_id - (LAG(measurement_id)OVER (ORDER BY measurement_id)) -1 
END gap 
FROM sensor_data 
) 
WHERE gap > 0;


Output will look like:-

GAP_FROM GAP_TO
3 3
6 6
8 9




المشكله : اذا كان الفراغ غالموجود اكثر من رقم (مثل 2-3-8) يجب ان احصل على (4-5-6-7) ولكن احصل على انه توجد مسافات مابين ال3 وال 8 وانا اريد التفصيل
هل من طريقة لتفصيل الارقام
ارجو افادتي ،، حتى لو بطريقة اخرى
مع الشكر

بتاريخ:

السلام عليكم
أنا عملت جملة select تفي بالغرض وأعتقد أنها ممكن تتعمل بفانكشن هتكون أحسن وأشيك
فمثلا لو عندنا جدول يسمى emp وبه col يعتبر serial وحدث به gab لو عملنا هذا الquery بإذن الله هتطلع النتيجة

select serial from emp union select rownum from(select serial  from emp union select rownum  from emp ) minus select serial  from emp;


وفقك الله

بتاريخ:

اعتقد هذا الكود مناسب لك

DECLARE
  x   NUMBER (10);
  y   NUMBER (10);
  z   NUMBER (10);
BEGIN
  SELECT MIN (yr_field)
 INTO x
 FROM table_name;

  SELECT MAX (yr_field)
 INTO y
 FROM table_name;

  FOR i IN x .. y
  LOOP
  SELECT COUNT (yr_field)
	INTO z
	FROM table_name
   WHERE yr_field = i;

  IF z = 0
  THEN
	 DBMS_OUTPUT.put_line (i);
  END IF;
  END LOOP;
END;

بتاريخ:

حلول وافكار جميلة ولو ممكن ازود طريقة تفكير تانية بسيطة
فرضا اريد ان اظهر الجاب بين رقم 5 و100 لفيلد emp_id

elect rownum from(select emp_id,rownum from emp order by emp_id)where emp_id<>row_num+5

لو المسلسل يبدا من واحد مش محتاج ازود 5

بتاريخ:
  • كاتب الموضوع
السلام عليكم
أنا عملت جملة select تفي بالغرض وأعتقد أنها ممكن تتعمل بفانكشن هتكون أحسن وأشيك
فمثلا لو عندنا جدول يسمى emp وبه col يعتبر serial وحدث به gab لو عملنا هذا الquery بإذن الله هتطلع النتيجة

select serial from emp union select rownum from(select serial  from emp union select rownum  from emp ) minus select serial  from emp;


وفقك الله


الاخ الكريم تم تجربة الكود ونفع تماما ،، ولكن كيف استعمله في البروسيجر ،، فأنا لا اريد تشغيله على sql
بتاريخ:
  • كاتب الموضوع
السلام عليكم
أنا عملت جملة select تفي بالغرض وأعتقد أنها ممكن تتعمل بفانكشن هتكون أحسن وأشيك
فمثلا لو عندنا جدول يسمى emp وبه col يعتبر serial وحدث به gab لو عملنا هذا الquery بإذن الله هتطلع النتيجة

select serial from emp union select rownum from(select serial  from emp union select rownum  from emp ) minus select serial  from emp;


وفقك الله


الاخ الكريم تم تجربة الكود ونفع تماما ،، ولكن كيف استعمله في البروسيجر ،، فأنا لا اريد تشغيله على sql



ااسف للخطأ ،، كان هذا الكلام موجه للاخ الكريم احمد جادو
مع الشكر
بتاريخ:

في حالة Forms يمكنك عمل داتا بلوك على الشاشة وليكن اسمه blk وبه تكست أيتم وليكن اسمه txt1 وتقوم بعمل زر وتكتب بداخله البروسيدجر كالتالي:

DECLARE
  x   NUMBER (10);
  y   NUMBER (10);
  z   NUMBER (10);
BEGIN
  SELECT MIN (yr_field)
 INTO x
 FROM table_name;

  SELECT MAX (yr_field)
 INTO y
 FROM table_name;

go_block('blk');
first_record;
  FOR i IN x .. y
  LOOP
  SELECT COUNT (yr_field)
	INTO z
	FROM table_name
   WHERE yr_field = i;

  IF z = 0
  THEN
	 :blk.txt1 := i;
next_record;
  END IF;
  END LOOP;
END;

بتاريخ:
  • كاتب الموضوع
في حالة Forms يمكنك عمل داتا بلوك على الشاشة وليكن اسمه blk وبه تكست أيتم وليكن اسمه txt1 وتقوم بعمل زر وتكتب بداخله البروسيدجر كالتالي:
DECLARE
  x   NUMBER (10);
  y   NUMBER (10);
  z   NUMBER (10);
BEGIN
  SELECT MIN (yr_field)
 INTO x
 FROM table_name;

  SELECT MAX (yr_field)
 INTO y
 FROM table_name;

go_block('blk');
first_record;
  FOR i IN x .. y
  LOOP
  SELECT COUNT (yr_field)
	INTO z
	FROM table_name
   WHERE yr_field = i;

  IF z = 0
  THEN
	 :blk.txt1 := i;
next_record;
  END IF;
  END LOOP;
END;




الرد وافي جزاك الله خيرا

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

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

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

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

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

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.