a5hhk بتاريخ: 20 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 20 مارس 2007 هل من الممكن البحث عن جدول أو عمود في قاعدة البيانات بدلالة البياناتفمثلا أريد جملة تسترجع أعمدة في الجداول التي تحتوي على قيمة MATH_COURSE مثلافهل من الممكن ذلك؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hanyfreedom بتاريخ: 22 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 22 مارس 2007 سؤالك ممتاز و سوف يفيد الجميع .... هذا هو الحل :- select TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME ='MATH_COURSE'; لاحظ كتابة أسم الحقل فى نهاية الكود بالحروف الكبتل .... لأن كل البيانات تكتب بالكبتل فى هذا الجدول و فى معظم الجداول الاخرى الموجودة بال DICTIONARY للعلم ال DICTIONARY هو جدول ينشىء ذاتياً بداخل اى اسكيمة ، و هو يحتوى على جداول توصف الاسكيمة وصفاً دقيقاً .و بالتوفيق أن شاء الله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
هانى سند بتاريخ: 22 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 22 مارس 2007 السلام عليم و رحمة الله و بركاته الأخ HANYFREEDOM أعتقد ان الأخ a5hhkمن الممكن ان يكون يسأل عن شئ اخر و ان كنت غير متأكد و الذي يمكن ان يفصل في ذلك هو الأخ صاحب السؤال نفسه فانا فهمت انه ربما يسأل عن امكانية ايجاد الجداول و الأعمدة في جداول مستخدم معين و التي يحتوي اي عمود منها علي قيمة محددة مثل MATH_COURSE و ذلك لاني اعتقد ان كلمة MATH_COURSE المتخذة كمثال هي اقرب لبيانات و ليست لاسم عمود كما انه يسأل عن ارتجاع أعمدة اي اكثر من عمود به قيمة و ان كان ما فهمته صحيحا فنعم بمكن ذلك و لكنها من الممكن ان تأخذ بعض الوقت اذا كان حجم البيانات لديك كبير و ذلك عن طريق انشاء الفانكشن الاتية CREATE OR REPLACE FUNCTION get_col_name ( i_owner IN VARCHAR2, i_search_val IN VARCHAR2 ) RETURN CHAR IS CURSOR c1 IS SELECT c.* FROM dba_tables t, dba_tab_cols c WHERE t.owner = UPPER (i_owner) AND c.table_name = t.table_name AND c.owner = t.owner ORDER BY c.table_name, c.column_name; v_sql LONG; v_flag NUMBER := 0; qt CHAR := CHR (39); v_val VARCHAR2 (150) := UPPER (i_search_val); v_ret VARCHAR2 (20000); BEGIN FOR rec IN c1 LOOP v_sql := 'SELECT 1 FROM ' || rec.table_name || ' '; v_sql := v_sql || ' WHERE UPPER(' || rec.column_name || ') LIKE ' || qt || '%' || v_val || '%' || qt; BEGIN EXECUTE IMMEDIATE v_sql INTO v_flag; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN v_flag := 1; END; IF v_flag = 1 THEN v_ret := v_ret || CHR (10) || rec.table_name || '.' || rec.column_name; END IF; v_flag := 0; END LOOP; RETURN v_ret; EXCEPTION WHEN OTHERS THEN RETURN 'ERROR RETURNING DATA'; END; و فكرة عمل هذه الفانكشن هي عمل كيرسور به اسماء الجداول مع اعمدتها ثم عمل ديناميك سيليكت تقوم باختيار فلاج من الجدول الحالي في اللوب بناء علي شرط ان العمود الحالي في اللوب يحتوي علي قيمة مشابهة للقيمة المراد البحث عنها فاذا تحقق الشرط يتم اضافة اسم الجدول مع اسم العمود الي متغير هو الذي ستقوم الفانكشن بارجاعه في النهاية و هو الذي يحتوي علي اسماء الأعمدة التي تحتوي علي بيانات مشابهة للنص المراد البحث عنه ارجو ان تكون و اضحة ملحوظة :يمن اختيا ر الفانكشن من جملة استعلام عن طريق الاتي SELECT GET_COL_NAME('SCOTT', 'SCOTT') FROM DUAL و أرجو من صاحب السؤال ان يوضح هل فهمي لسؤاله هو الصحيح ام لا مع تمنياتي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 22 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 22 مارس 2007 الأخ / hanon_OCPكالعادة .. دائما حاضر ومتألق شكرا كثيرا لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a5hhk بتاريخ: 24 مارس 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 مارس 2007 شكرا لكل الزملاء على هذه المساعدة وبالخصوصhanon_OCPلأن الذي فهمته بالفعل هو مقصدي من السؤال شكرا جزيلا لكم مرة أخرى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hanyfreedom بتاريخ: 24 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 24 مارس 2007 كود أخى العزيز hanon_OCP هو الصحيح ...... و أعتذر لفهمى الخطأ للسؤال ..... مع تمنياتى بالتوفيق لأخى a5hhk اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a5hhk بتاريخ: 25 مارس 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 مارس 2007 لاداعي للأسف يا أخي hanyfreedomوالله كلكم فيكم الخير والبركة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.