بتاريخ: 5 يونيو 200619 سنة comment_71357 ( المكنه طلعت قماش) فى البدايه احب ان اوجه الشكر للاخ الحبيب oracle_itself لانه هو اعطنى هذه الاكود وطلب منى ان اضعها على المنتدى من اجل فأئدة الجميع . فى البدايه ما الفأئده من ال dynamic sql ؟؟ عندما يكون لديك مشروع به عدد 50 جدول جميع الجداول لها نفس الهيكل ( الرقم,الاسم,التاريخ) التفكير العادى يفكر فى عمل 50 شاشه لكل جدول. ووحد تانى يقول اعمل tab canvas اما الافضل هو عمل اللى ميتعملش بجمل ال sql العاديه يعنى يعمل شاشة واحده و بها list بها اسما الجداول وبكده بأستخدام ال dynamic sql اصبح اسم الجدول متغير مثال للتوضيح اذا كنت تعمل فى مشروع " نادى رياضى" وطلب منك ان تعمل جداول للالعاب وهيكل جميع اللعب ثابت (رقم,اسم_الاعب,تاريخ(تاريخ حضوره فى التمرين)) فالحل هو استخدام ال dynamic sql . الكود مع شرح بسيط المرحله الاولى (sql*plus) 1- انشاء جدول create table Customer( Cust_id number, cust_name varchar2(50)) 2- يتم عمل package (لانه سيتم استخدام اكثر من اجراءوبما ان كلهم مرتبطين ببعض يتم عمل package ) اولآ ال head create or replace package pack1 is type cust_rec is record (cust_id customer.cust_id%type,cust_name customer.cust_name%type); type cust_cur is ref cursor return cust_rec; type cust_table is table of cust_rec index by binary_integer; procedure cust_data(cust_main in out cust_table); procedure cust_insert(r in cust_rec,p in customer.cust_name%type); end pack1; ثأنيآ ال body create or replace package body pack1 is procedure cust_data(cust_main in out cust_table) is co number; cursor fetch_data is select cust_id,cust_name from customer; begin co :=1; open fetch_data; loop fetch fetch_data into cust_main(co).cust_id,cust_main(co).cust_name; exit when fetch_data%notfound; co :=co+1; end loop; end cust_data; procedure cust_insert(r in cust_rec,p in customer.cust_name%type) is table_name varchar2(100); begin table_name := 'insert into ' || p || ' values (:1,:2)'; execute immediate table_name using r.cust_id,r.cust_name; end cust_insert; end pack1; المرحله الثانيه (forms) بعد فتح ال form نقوم بعمل data block next stroed procedure نكتب فى ال procedure pack1.cust_data ثم نقم بنقل من اليسار الى اليمين next ثم نكتب pack1.cust_data وبعدها نقوم بعمل next الى ان تظهر finish ونكمل كما لو كان table عادى خلاصنا ال data block when-new-form-instance declare cursor fetch_table is select tname from tab where user='scott'; n number; begin n :=1; for abc in fetch_table loop add_list_element('list6',n,abc.tname,abc.tname); n := n+1; end loop; end; نخش على كود الادخال فى زر when-button-pressed --فى هذا الكود يت تمرير القيم و اسم الجدول من خلال ال package declare r pack1.cust_rec; p varchar2(100); begin p :=:list6; -- name of list item r.cust_id :=:cust_id; r.cust_name :=:cust_name; pack1.cust_insert(r,p); commit_form; clear_form; end; لاتنسو تخلوا ال list database item =no اتمنى ان تكون الفكره واضحه وربنا مع الجميع للتأكيد هذا الكود من تنفيذ الاخ العزيز oracle_itself ايهاب وجدى تم تعديل 7 يونيو 200619 سنة بواسطة hobaa تقديم بلاغ
بتاريخ: 5 يونيو 200619 سنة comment_71360 أحب أشكر الأخ أيهاب وأخص بالشكر عن هذا الموضوع أستاذى oracle itselfوقوله الى الأمام وربنا يخليك ونتعلم منكتلميذكmah_dba تقديم بلاغ
بتاريخ: 5 يونيو 200619 سنة comment_71361 اخى العزيز ايهاب وجدى ..بعد التحية ..اولا لا شكر على واجب لأننا اخوة قبل اى شىء ..و كنت عايز اقول ان المثال دا يصلح عندما يكون لديك مجموعة من الجداول لها هيكل واحد مثل المحافظات ( رقم المحافظة - اسم المحافظة - الحالة ) .. المنطقة ( رقم المنطقة - اسم المنطقة - الحالة و هكذا ) ...............ثانيا ... هو اننا لازم نفكر بشكل متطور اكتر ... الكود دا بكل الى فية بيعمل ادخال بيانات بس.. الخطوة الجاية و الى انا عايز كل واحد فى هذا المنتدى يساهم فية .. هو تطوير الكود ليستوعب عملية البحث فى نفس الجداول و التعديل و الحذف و هذا ما اريدة بالفعل ...اتمنى لكم مزيد التوفيقOracle ITself تم تعديل 5 يونيو 200619 سنة بواسطة oracle_itself تقديم بلاغ
بتاريخ: 5 يونيو 200619 سنة كاتب الموضوع comment_71363 1+1 =2 ده العادىفى البرمجه1+1 =3 ده المتطورررررررررررررررررررررررررررراتمنى ان يشارك الجميع فى بنا فكر الاخرايهاب وجدى تقديم بلاغ
بتاريخ: 6 يونيو 200619 سنة comment_71444 ارجوا ان يكون كل من قرأ الموضوع يكون وصلتة المعلومة و شكرا تقديم بلاغ
بتاريخ: 8 يونيو 200619 سنة comment_71560 جزاك الله خيرا أخي الكريم و جعله الله في ميزان حسناتك تقديم بلاغ
بتاريخ: 10 يناير 200719 سنة comment_88895 باشا ربنا يكرمك وجزاك الله خير والى الأمام دائماوالله المستعاااان والموفقsmart angel oracle devloper تقديم بلاغ
بتاريخ: 11 يناير 200719 سنة comment_88959 [عندما يكون لديك مشروع به عدد 50 جدول جميع الجداول لها نفس الهيكل ( الرقم,الاسم,التاريخ) التفكير العادى والتحليلي الصحيح أن لا يكون لديك هذه الكمية من الجداول وهي ذات نفس البنية لأن هذا يضر بأداء قاعدة المعطيات إنما الصحيح هو أن نضيف حقل واحد على الجدول يعبر عن نوع اللعبة مثلا في مثال الرياضة الذي أعطيته هذا الحقل يغنيك عن 49 جدول لست بحاجة لهم .أما عن Dynamic SQL ففوائدها الحقيقية ليست في هذا المجال يا صديقي .فقط للتوضيح وأرجو من جميع المبرمجين العاملين مع قواعد المعطيات قراءة متعمقة في Analysis وال Normalization لما فيه فائدة لهم والإقلال من إهدار الوقت .ودمتم.عابر سبيل. تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.