如何从 all_views 获取各个视图的总记录数

ash*_*ini 6 oracle plsql plsqldeveloper

如何从 all_views 获取各个视图的总记录数。请找到以下代码以供参考..

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;
Run Code Online (Sandbox Code Playgroud)

电流输出:

V_DSP_BUSINESS_DATE            10
V_DSP_DEPARTMENT               20
V_DSP_EMPLOYEE_DEACTIVATED     50
V_DSP_EMPLOYEE_GED             80
Run Code Online (Sandbox Code Playgroud)

预期输出:

sum up the record count of all individual views

i.e 160
Run Code Online (Sandbox Code Playgroud)

请帮忙。

Lal*_*r B 1

只需修改LOOP每次获取 时的 sum sum即可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);
Run Code Online (Sandbox Code Playgroud)

确保声明v_cntv_cnt_tot变量。

如果您确实想在LOOPie中执行此操作row-by-row,请使用简单的CURSOR FOR LOOP而不是声明CURSOR.

就像是,

FOR i IN SELECT view_name 
     FROM all_views
     WHERE OWNER = SYS_CONTEXT( 'USERENV', 'CURRENT_SCHEMA')
LOOP
...
Run Code Online (Sandbox Code Playgroud)