إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

هل من الممكن البحث عن جدول أو أعمدة بدلالة البيانات


6 رد (ردود) على هذا الموضوع

#1 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 March 2007 - 07:09 AM

هل من الممكن البحث عن جدول أو عمود في قاعدة البيانات بدلالة البيانات
فمثلا أريد جملة تسترجع أعمدة في الجداول التي تحتوي على قيمة
MATH_COURSE
مثلا

فهل من الممكن ذلك؟

#2 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 22 March 2007 - 08:25 PM

سؤالك ممتاز و سوف يفيد الجميع .... هذا هو الحل :-

select TABLE_NAME from USER_TAB_COLUMNS 
where COLUMN_NAME ='MATH_COURSE';


لاحظ كتابة أسم الحقل فى نهاية الكود بالحروف الكبتل .... لأن كل البيانات تكتب بالكبتل فى هذا الجدول و فى معظم الجداول الاخرى الموجودة بال DICTIONARY

للعلم ال DICTIONARY هو جدول ينشىء ذاتياً بداخل اى اسكيمة ، و هو يحتوى على جداول توصف الاسكيمة وصفاً دقيقاً .

و بالتوفيق أن شاء الله


#3 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 23 March 2007 - 01:43 AM

السلام عليم و رحمة الله و بركاته

الأخ 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


و أرجو من صاحب السؤال ان يوضح هل فهمي لسؤاله هو الصحيح ام لا
مع تمنياتي بالتوفيق

#4 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,558 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 23 March 2007 - 02:28 AM

الأخ / hanon_OCP

كالعادة .. دائما حاضر ومتألق

شكرا كثيرا لك

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#5 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 24 March 2007 - 02:14 PM

شكرا لكل الزملاء على هذه المساعدة وبالخصوص
hanon_OCP
لأن الذي فهمته بالفعل هو مقصدي من السؤال


شكرا جزيلا لكم مرة أخرى

#6 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 24 March 2007 - 02:21 PM

كود أخى العزيز hanon_OCP هو الصحيح ...... و أعتذر لفهمى الخطأ للسؤال ..... مع تمنياتى بالتوفيق لأخى a5hhk

#7 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 March 2007 - 11:16 AM

لاداعي للأسف يا أخي hanyfreedom
والله كلكم فيكم الخير والبركة