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

 

Datalinks.vn

Hello các bạn, tôi là Dương Nguyễn (DuoDBA), là người đang tập tành viết lách trên blog này. Mong muốn được chia sẻ kiến thức và kinh nghiệm về cơ sở dữ liệu với những người đam mê và quan tâm đến lĩnh vực này. #Tôi có tổ chức các khoá Coaching về #OracleDatabase và luyện thi #OCP thường xuyên, các bạn cần người đồng hành thì alo tôi nhé. Call/Zalo: 0765 871 888. Thanks you !.....
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