الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

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

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

إليك هذه ال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

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

بتاريخ:

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

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.