Count all rows of All tables – Đếm tất cả row của các bảng trong Oracle Database

Để đế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.

word image 3230 1

Đế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;
/

word image 3230 2

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

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận