هانى سند بتاريخ: 11 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 11 فبراير 2007 السلام عليكم و رحمة الله وبركاته إخواني الكرام إليكم 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 الملف بالمرفقات مع تمنياتي بالتوفيق GET_COUNT_ALL.txt اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.