6

How to get Total record count of individual views from all_views. Please find below code for reference..

Declare
view_name     VARCHAR2(200);
v_str          VARCHAR2 (1000);
v_output     VARCHAR2(4000);

CURSOR tbl IS
     SELECT view_name 
     FROM all_views
     WHERE OWNER = SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA')
     ORDER BY 1 ;
BEGIN
OPEN tbl ;
     LOOP
     FETCH tbl INTO view_name;
     EXIT WHEN tbl%NOTFOUND;
          v_str := 'Select '''|| view_name ||'     '' || count (*) from ' || view_name ;
          EXECUTE IMMEDIATE v_str INTO v_output;

          DBMS_OUTPUT.PUT_LINE(v_output);
     END LOOP;
CLOSE tbl;
END;

current output :

V_DSP_BUSINESS_DATE            10
V_DSP_DEPARTMENT               20
V_DSP_EMPLOYEE_DEACTIVATED     50
V_DSP_EMPLOYEE_GED             80

Expected output :

sum up the record count of all individual views

i.e 160

Kindly help.

Dharmesh Porwal
  • 1,406
  • 2
  • 12
  • 21
ashwini
  • 75
  • 2
  • 5

2 Answers2

1

Simply modify the LOOP to sum up for each time it fetches the COUNT.

LOOP
FETCH tbl INTO view_name;
EXIT WHEN tbl%NOTFOUND;
     v_str := 'Select count (*) from ' || view_name ;
     EXECUTE IMMEDIATE v_str INTO v_cnt;
     v_cnt_tot := v_cnt_tot + v_cnt;


END LOOP;
DBMS_OUTPUT.PUT_LINE(v_cnt_tot);

Make sure you declare the v_cnt and v_cnt_tot variables.

If you really want to do it in LOOP i.e. row-by-row, then use a simple CURSOR FOR LOOP rather than declaring a CURSOR.

Something like,

FOR i IN SELECT view_name 
     FROM all_views
     WHERE OWNER = SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA')
LOOP
...
Lalit Kumar B
  • 47,486
  • 13
  • 97
  • 124
1

thank you so much for your help...:) It worked.

Please find below final code

Declare
view_name     VARCHAR2(200);
v_str          VARCHAR2 (1000);
v_cnt     VARCHAR2(4000);
v_cnt_tot     VARCHAR2(4000);

CURSOR tbl IS
     SELECT view_name 
     FROM all_views
     WHERE OWNER = SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA')
     ORDER BY 1 ;

BEGIN
 v_cnt_tot := 0;
OPEN tbl ;
     LOOP
     FETCH tbl INTO view_name;
     EXIT WHEN tbl%NOTFOUND;
          v_str := 'Select  count (*) as count from ' || view_name ;
          EXECUTE IMMEDIATE v_str INTO v_cnt;
          v_cnt_tot := v_cnt_tot + v_cnt;


     END LOOP;
    DBMS_OUTPUT.PUT_LINE(v_cnt_tot);
CLOSE tbl;
END;
ashwini
  • 75
  • 2
  • 5
  • If you are using Oracle SQL Developer, put this at the top of your script: set serveroutput on; Otherwise you will get a generic PL\SQL script ran successfully output. – Jeremy F. Aug 21 '18 at 16:24