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

درس البحث المتقدم بـ Forms

Featured Replies

بتاريخ:

اخوتي في هذا المنتدى الرائع
السلام عليكم ورحمة الله وبركاتة:-
احبتي هذه الطريقة في البحث تعلمتها من صديق من ( مصر الشقيقة ) وقد استأذنته
في وضعها كمشاركة في هذا المنتدى الرائع مساهمه منا بنشر العلم
كلنا يعرف طرق البحث المختلفه ب SQL وب CURSOR وب default_where
والبحث باكثر من جدول ا 00 الخ

لكن قد تحتاج الى بحث اكثر فعالية وجاذبيجة للمستخدم وبدقه متناهية بتحديد بيانات معينة او اطلاق بعضها0
هذا ماسنعرفه في هذا الدرس ان شاء الله

لنفرض ان لديك جدول معين ؟؟ والمثال على جدول EMP
ويحتوي على كم هائل من بيانات المواطنين ومن ضمن هذه البيانات الأعمدة التالية:-
رقم الموظف EMPNO
الاسم ENAME
المهنة JOB
المدير MGR
التاريخ HIREDATE
الراتب SAL
رقم القسم DEPTNO
--
واردت البحث بجميع الحقول اعلاه مجتمعة او كل واحد على حده او بحقلين او بثلاثة او باربعة 0 او بالاول والاخير او بالاخير والثاني او او 000 الخ
بـ FORM واحد وبامر واحد لاتقول بـ WHERE --- IN
--
ابداء مشروع جديدا بـ Data block Wizard واكمل خطوات انشاء جدول EMP
وليكن من نوع Tabular وعدد السجلات 15
--
انشي BLOCK يدوي وليكن اسمه CONTROL في هذا البلوك اضف عدد سبعة
ITEM وليكن اسمائهم على الترتيب T7,T6,T5,T4,T3.T2,T1 واجعلها فوق البلوك
EMP واكتب لهم عنواين رقم الموظف اسم الموظف 000 الخ
اضف Bush Button في نفس البلوك CONTROL في Triggers
WHEN-BUTTON-PRESSED
اكتب الكود التالي

DECLARE
  v_query VARCHAR2(200) := '(select EMPNO,ENAME,job,mgr,HIREDATE,sal,DEPTNO from EMP where ';
  v1 VARCHAR2(50);
		v2 VARCHAR2(50);
	 v3 VARCHAR2(50); 
	v4 VARCHAR2(50);
	v5 VARCHAR2(50);
	v6 VARCHAR2(50);
	v7 VARCHAR2(50);
N NUMBER;
r_id RECORDGROUP;
BEGIN
go_block('CONTROL');
  if NVL(LENGTH( (:CONTROL.t1) ),0)<>0 then
 v1:=' EMPNO = '''|| rtrim(ltrim(:CONTROL.t1))||'''';
  else
  	v1:='  1=1 ';
  	end if;
if NVL(LENGTH( (:CONTROL.t2) ),0)<>0 then
v2:='  AND ENAME like '''|| '%'||rtrim(ltrim(:CONTROL.t2))||'%'||'''';
  else
  	v2:=' AND 1=1 ';
  	end if;
if NVL(LENGTH( (:CONTROL.t3) ),0)<>0 then
 v3:=' AND job = '''||rtrim(ltrim(:CONTROL.t3))||'''';
  else
  	v3:=' AND 1=1 ';
  	end if;
if NVL(LENGTH( (:CONTROL.t4) ),0)<>0 then
 v4:=' AND mgr = '''||rtrim(ltrim(:CONTROL.t4))||'''';
  else
  	v4:=' and 1=1 ';
  	end if;
 if NVL(LENGTH( (:CONTROL.T5) ),0)<>0 then
 v5:=' AND HIREDATE = '''||rtrim(ltrim(:CONTROL.t5))||'''';
  else
  	v5:='AND 1=1 ';
  	end if;
  if NVL(LENGTH( (:CONTROL.t6) ),0)<>0 then
 v6:=' AND sal = '''||rtrim(ltrim(:CONTROL.t6))||'''';
  else
  	v6:='AND 1=1 ';
  end if;
  	if NVL(LENGTH( (:CONTROL.t7) ),0)<>0 then
 v7:=' AND DEPTNO = '''||rtrim(ltrim(:CONTROL.t7))||'''';
  else
  	v7:='  AND 1=1 ';
  	end if;
  v_query := v_query ||v1 ||v2 ||v3 ||v4 ||v5 ||v6||v7 ||')';
 r_id:=FIND_GROUP('QQ1');
IF not ID_NULL(FIND_GROUP('QQ1')) THEN
	DELETE_GROUP(r_id);
	else
	message(  v_query);
 r_id:=create_group_from_query('QQ1', v_query);
n:=populate_group('QQ1');
	DELETE_GROUP(r_id);
end if;
  go_block('EMP');
  clear_block;
set_block_property('EMP', QUERY_DATA_SOURCE_NAME, v_query);
  execute_query(no_validate);
  -- :CONTROL.d1 :=get_group_row_count(r_id);

	raise form_trigger_failure;

END;


لاتنسونا من صالح الدعاء

  • الردود 30
  • المشاهدات 14.6k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

بتاريخ:

السلام عليكم
فكرة حلوة وسلمت يداك
وفقك الله
الجنتل

بتاريخ:

مشكور اخى العزيز

بتاريخ:

آسف على التاخير علما انه كان من المفترض انه اكون اول واحد يرد على الموضوع بس سامحني

جاري تجربة الكود والى الامام ان شاء الله

بتاريخ:

اخى فى البدايه مشكور على الفكره الرائعه

انا محتاج اعرف ما هى فائدة الداله rtrim

على فكره انا جربت الكود بس مطلعش نتيجه !!!! انا الصراحه مكنتش فاضى بس هاجربه تانى و ارد عليك

ايهاب وجدى

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

اخوتي في المنتدى
السلام عليكم ورحمة الله وبركاتة:-
شكرا للجميع على الردود و الاجابات والتفاعل
اخي / hobaa
بالنسبة لسوائلك فان الدالتين
rtrim لازالة الفراغات من اليمين
ltrim لازالة الفراغ من اليسار
--
هذا على حد علمي
اسال الله التوفيق لنا جميعا،،،

بتاريخ:

مشكور اخى على التوضيح

بتاريخ:

شكرا على الموضوع الرائع

بتاريخ:

شكرا على الموضوع الرائع

وشغال 100 %

بتاريخ:

شكرا على الموضوع الجميل
ولكن هل البحث هنا مماثل لخاصيه الأستعلام فى الdeveloper ولا مختلف
يعنى إيه الزياده هنا
وجزاك الله خيرا

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

السلام عليكم ورحمة الله وبركاتة :-
شكرا لكافة الزملاء
بالنسبة لسوالك اخي / Comander
بالنسبة لهذا البحث فهو يتفق مع البحث العادي من جهة ويختلف من جهة اخرى
فهو شبية بالمعامل OR بالنسبة لحقلين فقط واذا زات الحقول فلن تحقق نتيجة في المعامل OR
فأنه سوف يعطيك بيانات كثيرة وغير دقيقة على سبيل المثال:-
لو اردت البحث بحرف (م) والادارة 30 والعمر مثلا 30 ولديك اكثر من شخص مائة شخص مثلا
من ضمن هولاء الاشخاص شخص يبداء اسمه (م) ولكن انه في الادارة 20 وعمره 40
وانفذت البحث ب Or فأنه سوف يعرض لك الاشخاص الذين في الادارة 30 ومن ضمنهم حبيبنا هذا الذي عمره 40 ويعمل في الادارة 20 ناهيك اذا كانت قاعدة البيانات بها ملايين السجلات فتخيل السجلات المعروضه
--
لكن بهذا البحث فانه يقتصر على من تتوفر به الشروط المدونه في الحقول فقط
بصراحة كأنك تبحث بـ AND ولكن بطريقة مختلفه تماما وانت لاحظ وجود AND داخل الكود و طبعا بـ AND العادية لن يتحقق شيء على الاطلاق0 وانت جرب البحث بـ OR وشوف النتيجة

ارجو ان اكون قد اوضحت
هذا على حد علمي
بالتوفيق

بتاريخ:

أخى الفاضل محمد
شكرا على التوضيح لكن أنا تقريبا ممكن اكون تهت منك
دلوقتى أنا لو عملت form بدائيه على جدول emp مثلا وبعدين دخلت وعملت إستعلام
على أكتر من حقل ساعتها كأنه بيعمل AND بين الأختيارات فى سطر الWHERE وليس OR ولو مادخلتش قيمه أثناء الأستعلام مش حيحطها فى ال WHERE يعنى تقريبا زى الكود المكتوب فوق
معرفش أنا كده فهمتك ولا لأ

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

السلام عليكم ورحمة الله وبركاتة
اخي /Comander
كلامك صحيح 100% بالنسبة لـ WHere
لكن انا قصدي في الشرح لو طرحت هذا الكود جانبا واستعملت الكودات المعروفه فهنا يتضح الفرق
select * from emp where ename= t1 or jop = t2 or .... or وهكذا
ونفذت الاستعلام وانت عارف النتيجة طبعا00000
ولعلمك ياخي انا ناقل من صديقي مثلك ولم اتي به من عندي وقد استأذنته قبل وضعه في المنتدى كما هو موضح في البداية
وانني بصراحة اكون مبسوط اذا علق احد الاخوة مثلك لتعم الفائدة الجميع
وجزاك الله خير
والسلام

  • بعد 3 أسابيع...
بتاريخ:

رضي الله عنك وارضاك
ومن النار وقاك
وللجنة دعاك
والفردوس مأواك
اللهم آمين

  • بعد 4 أسابيع...
بتاريخ:

صراحه ما اشتغل معى

ممكن شرح بالصوره

  • بعد 2 أسابيع...
بتاريخ:

شكرا على الموضوع الرائع

بتاريخ:

جزاك الله خير

بتاريخ:

بارك الله فيك ، أريد فقط السؤال هل أستطيع البحث في جداول متعددة بهذا الكود وشكرا

بتاريخ:

مشاركه ممتازه

ونوع جديد من البحث وجزاك الله كل الخير اخى الكريم


شكرا لتعبك ولمجهودك

  • بعد 2 أسابيع...
بتاريخ:

السلام عليكم,
اود المشاركة في موضوع ltrim & rtrim
و تصحيحا لرأي اخي
HOBAA
انه هاتان الدالتان تقومان بحذف الفراغات من اليمين و اليسار ليس فقط حذف الفراغات بل يمكنك ان تحذف ما تريد
من يمين النص او يساره مثال على
(ltrim):



ltrim(' tech'); would return 'tech'
ltrim(' tech', ' '); would return 'tech'
ltrim('000123', '0'); would return '123'
ltrim('123123Tech', '123'); would return 'Tech'
ltrim('123123Tech123', '123'); would return 'Tech123'
ltrim('xyxzyyyTech', 'xyz'); would return 'Tech'
ltrim('6372Tech', '0123456789'); would return 'Tech'


The ltrim function may appear to remove patterns, but this is not the case as demonstrated in the following example.

ltrim('xyxzyyyTech', 'xyz'); would return 'Tech'

It actually removes the individual occurrences of 'x', 'y', and 'z', as opposed to the pattern of 'xyz'.

The ltrim function can also be used to remove all leading numbers as demonstrated in the next example.

ltrim( '6372Tech', '0123456789'); would return 'Tech'

In this example, every number combination from 0 to 9 has been listed in the trim_string parameter. By doing this, it does not matter the order that the numbers appear in string1, all leading numbers will be removed by the ltrim function.

  • بعد 1 شهر...
بتاريخ:

يا اخي الله يبارك بيك ويرزقك امين اخوك وسام خالد من العراق

  • بعد 4 أسابيع...
بتاريخ:

معلش فائدة الجروب الي عملها هنا ايه انه يعمل بيها تيست بس ولا ايه؟

  • بعد 1 شهر...
بتاريخ:

شكرا أخى الكريم على هذا الشرح ولكن أرجوا منك توضيح كيفية عمل نفس هذا البحث بواسطة cursor
وشكرا

  • بعد 3 أسابيع...
بتاريخ:

السلام عليكم
ارجو ممن يستطيع شرح الكود السابق بالتفصيل
وكيف يكمن عمل بحث بواسطة عبارة select,where ؟؟ وعلى نفس المثال السابق
وشكرا

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

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

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

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

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

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.