-
-
Save guestart/0ca72e5344aa3ecaf26b905337e1dcd8 to your computer and use it in GitHub Desktop.
Two anonymous plsql blocks checking those tables (starting with "DBA_HIST_" in SYS schema of oracle database) returned line is 0.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SET SERVEROUTPUT ON; | |
DECLARE | |
v_sql VARCHAR2(200); | |
v_tablename VARCHAR2(50); | |
tab_num NUMBER; | |
v_ref_cursor SYS_REFCURSOR; | |
BEGIN | |
OPEN v_ref_cursor FOR | |
SELECT table_name | |
FROM dict | |
WHERE table_name LIKE '%DBA_HIST_%' | |
ORDER BY 1; | |
LOOP | |
FETCH v_ref_cursor INTO v_tablename; | |
v_sql := 'SELECT COUNT(*) INTO tab_num FROM ' || v_tablename.table_name; | |
EXECUTE IMMEDIATE v_sql; | |
IF tab_num = 0 THEN | |
DBMS_OUTPUT.PUT_LINE('The lines of ' || v_tablename.table_name || ' has been returned 0.'); | |
END IF; | |
EXIT WHEN v_ref_cursor%NOTFOUND; | |
END LOOP; | |
CLOSE v_ref_cursor; | |
END; | |
/ | |
DECLARE | |
* | |
ERROR at line 1: | |
ORA-00905: missing keyword | |
ORA-06512: at line 18 | |
-- The updated version after replied to me on https://www.freelists.org/post/oracle-l/Why-these-two-methods-using-cursor-to-acquire-table-name-and-then-using-this-table-name-to-select-its-returned-lines-is-always-encoutered-a-weird-error,1. | |
-- on Oracle-L with FreeLists.org. | |
SET SERVEROUTPUT ON; | |
DECLARE | |
v_sql VARCHAR2(200); | |
v_tablename VARCHAR2(50); | |
tab_num NUMBER; | |
v_ref_cursor SYS_REFCURSOR; | |
BEGIN | |
OPEN v_ref_cursor FOR | |
SELECT table_name | |
FROM dict | |
WHERE table_name LIKE '%DBA_HIST_%' | |
ORDER BY 1; | |
LOOP | |
FETCH v_ref_cursor INTO v_tablename; | |
v_sql := 'SELECT COUNT(*) FROM ' || v_tablename.table_name; | |
EXECUTE IMMEDIATE v_sql INTO tab_num; | |
IF tab_num = 0 THEN | |
DBMS_OUTPUT.PUT_LINE('The lines of ' || v_tablename.table_name || ' has been returned 0.'); | |
END IF; | |
EXIT WHEN v_ref_cursor%NOTFOUND; | |
END LOOP; | |
CLOSE v_ref_cursor; | |
END; | |
/ | |
v_sql := 'SELECT COUNT(*) FROM ' || v_tablename.table_name; | |
* | |
ERROR at line 15: | |
ORA-06550: line 15, column 53: | |
PLS-00487: Invalid reference to variable 'V_TABLENAME' | |
ORA-06550: line 15, column 5: | |
PL/SQL: Statement ignored | |
ORA-06550: line 18, column 59: | |
PLS-00487: Invalid reference to variable 'V_TABLENAME' | |
ORA-06550: line 18, column 7: | |
PL/SQL: Statement ignored | |
-- Replacing "v_tablename.table_name" with "v_tablename" on lines 15 and 18 is right. | |
SET SERVEROUTPUT ON; | |
DECLARE | |
v_sql VARCHAR2(200); | |
v_tablename VARCHAR2(50); | |
tab_num NUMBER; | |
v_ref_cursor SYS_REFCURSOR; | |
BEGIN | |
OPEN v_ref_cursor FOR | |
SELECT table_name | |
FROM dict | |
WHERE table_name LIKE '%DBA_HIST_%' | |
ORDER BY 1; | |
LOOP | |
FETCH v_ref_cursor INTO v_tablename; | |
v_sql := 'SELECT COUNT(*) FROM ' || v_tablename; | |
EXECUTE IMMEDIATE v_sql INTO tab_num; | |
IF tab_num = 0 THEN | |
DBMS_OUTPUT.PUT_LINE('The lines of ' || v_tablename || ' has been returned 0.'); | |
END IF; | |
EXIT WHEN v_ref_cursor%NOTFOUND; | |
END LOOP; | |
CLOSE v_ref_cursor; | |
END; | |
/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment