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