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

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

صورة
- - - - -

إليكم Function للحصول علي عدد السجلات في كل الجداول مرة واحدة


لا توجد ردود على هذا الموضوع

#1 هانى سند

هانى سند

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

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

تاريخ المشاركة 11 February 2007 - 10:09 PM

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

إخواني الكرام

إليكم function للحصول علي عدد السجلات في كل الجداول مرة واحدة اي بصورة مجمعة

اليكم الكود

CREATE OR REPLACE FUNCTION SCOTT.get_count_all
   RETURN NUMBER
IS
   CURSOR c1
   IS
	  SELECT table_name
		FROM user_tables;
   v_sql		 LONG;
   v_count	   NUMBER := 0;
   v_count_all   NUMBER := 0;
BEGIN
   FOR rec IN c1
   LOOP
	  v_sql := 'SELECT COUNT(1) FROM ' || rec.table_name;
	  EXECUTE IMMEDIATE v_sql
				   INTO v_count;
	  v_count_all := v_count_all + v_count;
   END LOOP;
   RETURN v_count_all;
EXCEPTION
   WHEN OTHERS
   THEN
	  RETURN -1;
END;
/

شرح للكود : تقوم فكرة عمل هذه الfunction علي استخدام الدناميمك sql في loop به اسماء الجداول الخاصة بالمستخدم و تنفيذ جملة استعلام عن الcount و تجميعه ف ي متغير اخر

و الطريقة المستخدمة للdynamic sql هي باستخدام execute immediate
و في هذه الجملة

	  EXECUTE IMMEDIATE v_sql
				;  INTO v_count
يتم تنفيذ الجملة في متغير v_count و جمعه عن طريق المتغير v_count_all

ملحوظة :هذه الfunction اذا تم تنفيذها في سكيما بها جداول كثيرة و بها يجلات كثيرة قد تأخذ وقتا طويلا

مثال للاستخدام
SQL> conn scott/tiger
Connected.
SQL> select get_count_all
  2  from  dual;

GET_COUNT_ALL																   
-------------																   
		12053	  

الملف بالمرفقات


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

ملفات مرفقة