بتاريخ: 12 يناير 200719 سنة comment_89052 اخوتي في هذا المنتدى الرائعالسلام عليكم ورحمة الله وبركاتة:-احبتي هذه الطريقة في البحث تعلمتها من صديق من ( مصر الشقيقة ) وقد استأذنتهفي وضعها كمشاركة في هذا المنتدى الرائع مساهمه منا بنشر العلمكلنا يعرف طرق البحث المختلفه ب 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; لاتنسونا من صالح الدعاء تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة comment_89167 آسف على التاخير علما انه كان من المفترض انه اكون اول واحد يرد على الموضوع بس سامحنيجاري تجربة الكود والى الامام ان شاء الله تقديم بلاغ
بتاريخ: 13 يناير 200719 سنة comment_89203 اخى فى البدايه مشكور على الفكره الرائعه انا محتاج اعرف ما هى فائدة الداله rtrim على فكره انا جربت الكود بس مطلعش نتيجه !!!! انا الصراحه مكنتش فاضى بس هاجربه تانى و ارد عليكايهاب وجدى تقديم بلاغ
بتاريخ: 14 يناير 200719 سنة كاتب الموضوع comment_89212 اخوتي في المنتدىالسلام عليكم ورحمة الله وبركاتة:-شكرا للجميع على الردود و الاجابات والتفاعلاخي / hobaaبالنسبة لسوائلك فان الدالتينrtrim لازالة الفراغات من اليمينltrim لازالة الفراغ من اليسار--هذا على حد علمياسال الله التوفيق لنا جميعا،،، تقديم بلاغ
بتاريخ: 21 يناير 200719 سنة comment_89861 شكرا على الموضوع الجميل ولكن هل البحث هنا مماثل لخاصيه الأستعلام فى الdeveloper ولا مختلفيعنى إيه الزياده هناوجزاك الله خيرا تقديم بلاغ
بتاريخ: 22 يناير 200719 سنة كاتب الموضوع comment_89873 السلام عليكم ورحمة الله وبركاتة :-شكرا لكافة الزملاء بالنسبة لسوالك اخي / Comanderبالنسبة لهذا البحث فهو يتفق مع البحث العادي من جهة ويختلف من جهة اخرىفهو شبية بالمعامل OR بالنسبة لحقلين فقط واذا زات الحقول فلن تحقق نتيجة في المعامل ORفأنه سوف يعطيك بيانات كثيرة وغير دقيقة على سبيل المثال:-لو اردت البحث بحرف (م) والادارة 30 والعمر مثلا 30 ولديك اكثر من شخص مائة شخص مثلامن ضمن هولاء الاشخاص شخص يبداء اسمه (م) ولكن انه في الادارة 20 وعمره 40وانفذت البحث ب Or فأنه سوف يعرض لك الاشخاص الذين في الادارة 30 ومن ضمنهم حبيبنا هذا الذي عمره 40 ويعمل في الادارة 20 ناهيك اذا كانت قاعدة البيانات بها ملايين السجلات فتخيل السجلات المعروضه--لكن بهذا البحث فانه يقتصر على من تتوفر به الشروط المدونه في الحقول فقط بصراحة كأنك تبحث بـ AND ولكن بطريقة مختلفه تماما وانت لاحظ وجود AND داخل الكود و طبعا بـ AND العادية لن يتحقق شيء على الاطلاق0 وانت جرب البحث بـ OR وشوف النتيجةارجو ان اكون قد اوضحت هذا على حد علميبالتوفيق تقديم بلاغ
بتاريخ: 22 يناير 200719 سنة comment_89891 أخى الفاضل محمدشكرا على التوضيح لكن أنا تقريبا ممكن اكون تهت منكدلوقتى أنا لو عملت form بدائيه على جدول emp مثلا وبعدين دخلت وعملت إستعلام على أكتر من حقل ساعتها كأنه بيعمل AND بين الأختيارات فى سطر الWHERE وليس OR ولو مادخلتش قيمه أثناء الأستعلام مش حيحطها فى ال WHERE يعنى تقريبا زى الكود المكتوب فوقمعرفش أنا كده فهمتك ولا لأ تقديم بلاغ
بتاريخ: 22 يناير 200719 سنة كاتب الموضوع comment_89913 السلام عليكم ورحمة الله وبركاتة اخي /Comanderكلامك صحيح 100% بالنسبة لـ WHereلكن انا قصدي في الشرح لو طرحت هذا الكود جانبا واستعملت الكودات المعروفه فهنا يتضح الفرقselect * from emp where ename= t1 or jop = t2 or .... or وهكذاونفذت الاستعلام وانت عارف النتيجة طبعا00000ولعلمك ياخي انا ناقل من صديقي مثلك ولم اتي به من عندي وقد استأذنته قبل وضعه في المنتدى كما هو موضح في البدايةوانني بصراحة اكون مبسوط اذا علق احد الاخوة مثلك لتعم الفائدة الجميعوجزاك الله خيروالسلام تقديم بلاغ
بتاريخ: 9 فبراير 200719 سنة comment_91273 رضي الله عنك وارضاكومن النار وقاكوللجنة دعاكوالفردوس مأواكاللهم آمين تقديم بلاغ
بتاريخ: 20 مارس 200719 سنة comment_94453 بارك الله فيك ، أريد فقط السؤال هل أستطيع البحث في جداول متعددة بهذا الكود وشكرا تقديم بلاغ
بتاريخ: 21 مارس 200719 سنة comment_94623 مشاركه ممتازهونوع جديد من البحث وجزاك الله كل الخير اخى الكريمشكرا لتعبك ولمجهودك تقديم بلاغ
بتاريخ: 1 أبريل 200719 سنة comment_95683 السلام عليكم,اود المشاركة في موضوع 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. تقديم بلاغ
بتاريخ: 13 مايو 200718 سنة comment_99648 يا اخي الله يبارك بيك ويرزقك امين اخوك وسام خالد من العراق تقديم بلاغ
بتاريخ: 8 يونيو 200718 سنة comment_101769 معلش فائدة الجروب الي عملها هنا ايه انه يعمل بيها تيست بس ولا ايه؟ تقديم بلاغ
بتاريخ: 18 يوليو 200718 سنة comment_105135 شكرا أخى الكريم على هذا الشرح ولكن أرجوا منك توضيح كيفية عمل نفس هذا البحث بواسطة cursorوشكرا تقديم بلاغ
بتاريخ: 6 أغسطس 200718 سنة comment_106635 السلام عليكم ارجو ممن يستطيع شرح الكود السابق بالتفصيل وكيف يكمن عمل بحث بواسطة عبارة select,where ؟؟ وعلى نفس المثال السابق وشكرا تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.