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

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

صورة
- - - - -

إليكم Function لاستخراج أسماء الجداول و الأعمدة التي تحتوي علي بيانات معينة


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

#1 هانى سند

هانى سند

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

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

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

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

الإخوة الكرام

إليك هذه الFUNCTION

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

فمثلا إذا اردت معرفة اي الجداول و الأعمدة التي تحتوي علي كلمة SCOTT
يكنك استخدام هذه الFUNCTION
و التي ستقوم بارجاع الناتج لك علي شكل اسم الجدول.اسم العمود كلا في سطر منفصل

اليكم الكود



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;


شرح بسيط:

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


مثال علي كيفية استخدامها من الSQL



SELECT GET_COL_NAME('SCOTT', 'SCOTT')
FROM  DUAL


ملحوظة :الFunction تعمل علي اصدار قاعدة البيانات بدءا من 8i

مع تمنياتي بالتوفيق

#2 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

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

فكـــــــــــــــرة ممتازة

#3 King Oracle

King Oracle

    مشرف قسم المشاريع

  • فريق الإشراف
  • 2,043 مشاركة
  • البـلـد: Country Flag

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

رائع جدا اخي العزيز hanon_OCP وجاري التجربة .......

[سبحان الله وبحمده ... سبحان الله العظيم]


م.علاء الدين الجبالي
Oracle APPS HCM Techno Functional Consultant


مدونتي الخاصة ... ( للتواصل معكم )
http://aljabali2010.blogspot.com/

التواصل عبر السكايبي

araboug.org
or
aladdin_aljabali

للتواصل عبر الايميل ( الماسنجر )

aladdin2011@live.com

موبايل 1: 00966540873048 ( حاليا في السعودية)
موبايل 2: 00962798522832


اللهم لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم