Để đếm số lượng hàng (rows) trong tất cả các bảng của một schema trong Oracle, bạn có thể sử dụng một truy vấn SQL kết hợp với các khung nhìn hệ thống của Oracle, như ALL_TABLES và DBA_TABLES (nếu bạn có quyền truy cập) để lấy danh sách các bảng, sau đó sử dụng truy vấn động (dynamic SQL) để đếm số hàng trong mỗi bảng.
Sử dụng PL/SQL để Đếm Số Hàng trong Tất Cả Các Bảng
SET SERVEROUTPUT ON DECLARE v_table_name VARCHAR2(255); v_row_count NUMBER; BEGIN FOR rec IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || rec.table_name INTO v_row_count; DBMS_OUTPUT.PUT_LINE('Table: ' || rec.table_name || ' - Row Count: ' || v_row_count); END LOOP; END; /
Trong đoạn mã trên:
- SET SERVEROUTPUT ON được sử dụng để bật đầu ra của DBMS_OUTPUT.PUT_LINE.
- Khối PL/SQL duyệt qua tất cả các bảng trong schema của người dùng hiện tại bằng cách sử dụng user_tables.
- EXECUTE IMMEDIATE thực thi câu lệnh SQL động để đếm số hàng trong mỗi bảng.
- DBMS_OUTPUT.PUT_LINE hiển thị tên bảng và số hàng.
Đếm Số Hàng trong Tất Cả Các Bảng của Một Schema Cụ Thể
Nếu bạn muốn đếm số hàng trong tất cả các bảng của một schema cụ thể, bạn có thể sử dụng khung nhìn ALL_TABLES hoặc DBA_TABLES (yêu cầu quyền truy cập DBA).
SET SERVEROUTPUT ON DECLARE v_owner VARCHAR2(255) := 'DUONGUSER'; -- Thay bằng tên schema bạn muốn NHÉ v_table_name VARCHAR2(255); v_row_count NUMBER; BEGIN FOR rec IN (SELECT owner, table_name FROM all_tables WHERE owner = v_owner) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || rec.owner || '.' || rec.table_name INTO v_row_count; DBMS_OUTPUT.PUT_LINE('Table: ' || rec.owner || '.' || rec.table_name || ' - Row Count: ' || v_row_count); END LOOP; END; /
Sử dụng SQL Đơn Giản với Union All (Không Khuyến Khích)
Nếu bạn chỉ muốn sử dụng SQL mà không cần PL/SQL, bạn có thể tạo một truy vấn dài bằng cách sử dụng UNION ALL. Tuy nhiên, điều này không thực tế nếu có nhiều bảng.
SELECT 'Table1' AS table_name, COUNT(*) AS row_count FROM Table1 UNION ALL SELECT 'Table2', COUNT(*) FROM Table2 UNION ALL SELECT 'Table3', COUNT(*) FROM Table3;
Một vài điểm lưu ý:
- Các truy vấn này có thể tốn thời gian nếu có nhiều bảng hoặc bảng lớn vì chúng đếm số lượng hàng thực sự trong mỗi bảng.
- Nếu bạn có quyền DBA, bạn có thể xem xét sử dụng các khung nhìn như DBA_TABLES để lấy danh sách các bảng từ tất cả các schema.
- Để cải thiện hiệu suất, bạn có thể cân nhắc sử dụng thống kê của Oracle (ALL_TAB_STATISTICS, DBA_TAB_STATISTICS) thay vì đếm trực tiếp nếu chấp nhận được sự không chính xác.
=>> Anh em nên sử dụng PL/SQL là nhanh nhất nhé
Chúc anh em thành công