-- 创建临时表存储结果
CREATE GLOBAL TEMPORARY TABLE TEMP_ROW_COUNTS (
TABLE_NAME VARCHAR(128),
ESTIMATED_ROWS NUMBER,
ACTUAL_ROWS NUMBER
) ON COMMIT PRESERVE ROWS;
-- 创建并执行动态SQL的存储过程
CREATE OR REPLACE PROCEDURE GET_ALL_TABLE_ROWS AS
V_SQL VARCHAR(4000);
BEGIN
FOR T IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP
V_SQL := 'INSERT INTO TEMP_ROW_COUNTS SELECT ''' || T.TABLE_NAME || ''',
(SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = ''' || T.TABLE_NAME || '''),
(SELECT COUNT(*) FROM "' || T.TABLE_NAME || '")';
EXECUTE IMMEDIATE V_SQL;
END LOOP;
END;
/
-- 执行存储过程
CALL GET_ALL_TABLE_ROWS();
-- 查看结果
SELECT * FROM TEMP_ROW_COUNTS;
-- 清理
DROP PROCEDURE GET_ALL_TABLE_ROWS;
DROP TABLE TEMP_ROW_COUNTS;