Skip to Main Content
☕ Ủng hộ cafe

☕ Mời mình một ly cafe

Nếu tài liệu này hữu ích, bạn có thể ủng hộ mình một ly cafe để mình có thêm động lực viết tiếp ❤️

QR Support
Ngân hàng: VC Bank
Chủ tài khoản: DO KHAC LAM
Số tài khoản: 7906077097
Nội dung: Ung ho Dokhala
Cảm ơn bạn đã ủng hộ Dokhala 🙏
💬 Liên hệ

💬 Kết nối với mình

Bạn cần hỏi thêm về Oracle APEX, góp ý nội dung, hoặc muốn trao đổi dự án? Có thể nhắn mình qua các kênh dưới đây.

← Quay lại bài viết

Tạo dữ liệu test thực tế trong Oracle APEX với APEX_DG_DATA_GEN

Tìm hiểu cách dùng APEX_DG_DATA_GEN trong Oracle APEX để tạo dữ liệu test và demo thực tế hơn cho report, form, dashboard và quy trình kiểm thử mà không cần dùng dữ liệu thật.

Trong hầu hết các dự án Oracle APEX, có một tình huống rất quen thuộc: giao diện ứng dụng đã được dựng xong, report đã có, form đã có, dashboard cũng đã sẵn sàng, nhưng bảng dữ liệu lại gần như trống. Khi đó, việc kiểm thử giao diện, phân trang, filter, biểu đồ, validation và quy trình nghiệp vụ trở nên khó khăn.

Một số nhóm phát triển thường xử lý nhanh bằng cách copy dữ liệu thật từ production xuống môi trường dev hoặc test. Cách này tiện trong ngắn hạn, nhưng tiềm ẩn nhiều rủi ro: lộ dữ liệu khách hàng, dữ liệu test bị giữ lại quá lâu, hoặc thông tin nhạy cảm vô tình xuất hiện trong môi trường demo.

Oracle APEX cung cấp một hướng tiếp cận an toàn và chuyên nghiệp hơn thông qua package APEX_DG_DATA_GEN. Package này hỗ trợ tạo dữ liệu mẫu, dữ liệu demo và dữ liệu kiểm thử trực tiếp từ database/APEX, giúp lập trình viên có dữ liệu đủ thực tế để kiểm tra giao diện, báo cáo, dashboard và luồng nghiệp vụ mà không cần dùng dữ liệu thật.

APEX_DG_DATA_GEN là gì?

APEX_DG_DATA_GEN là package trong Oracle APEX dùng cho việc tạo dữ liệu giả lập. Thay vì tự viết thủ công hàng trăm dòng insert, bạn có thể dùng data generator để sinh ra các giá trị như tên người, email, địa chỉ, số điện thoại, chức danh, công ty, ngày tháng hoặc các nhóm dữ liệu mẫu khác.

Điểm đáng giá của package này là dữ liệu tạo ra nhìn “thật” hơn so với các giá trị kiểu Test 1, Test 2, abc hoặc demo. Khi dữ liệu giống thực tế hơn, việc kiểm tra giao diện và nghiệp vụ cũng sát với tình huống thật hơn.

Vì sao dữ liệu test tốt lại quan trọng?

Một ứng dụng APEX có thể chạy đúng khi chỉ có vài dòng dữ liệu, nhưng lại phát sinh vấn đề khi có vài trăm hoặc vài nghìn dòng. Report có thể bị vỡ layout, filter có thể khó dùng, chart có thể thiếu ý nghĩa, và hiệu năng query có thể thay đổi rất nhiều khi dữ liệu lớn hơn.

Dữ liệu test tốt giúp bạn kiểm tra được nhiều khía cạnh:

  • Report có hiển thị đẹp khi dữ liệu dài, ngắn, null hoặc trùng lặp không?
  • Interactive Report hoặc Interactive Grid có filter/sort đúng không?
  • Dashboard có đủ dữ liệu để biểu đồ có ý nghĩa không?
  • Validation có xử lý các trường hợp dữ liệu bất thường không?
  • Phân trang, tìm kiếm và LOV có hoạt động tốt khi dữ liệu tăng lên không?
  • Hiệu năng SQL có ổn khi bảng có nhiều dòng hơn không?

Vì vậy, tạo dữ liệu test không chỉ là việc “lấp đầy bảng”. Nó là một phần quan trọng của quy trình phát triển ứng dụng chuyên nghiệp.

Ví dụ tạo dữ liệu mẫu bằng APEX_DG_DATA_GEN

Một cách sử dụng phổ biến là lấy dữ liệu mẫu từ các nhóm dữ liệu có sẵn. Ví dụ, bạn có thể tạo danh sách tên, họ, email hoặc chức danh để phục vụ bảng nhân viên mẫu.

select fn.column_value as first_name,
       ln.column_value as last_name,
       em.column_value as email,
       jb.column_value as job_title
from table(apex_dg_data_gen.get_example('person.first_name', 10)) fn,
     table(apex_dg_data_gen.get_example('person.last_name', 10)) ln,
     table(apex_dg_data_gen.get_example('person.email', 10)) em,
     table(apex_dg_data_gen.get_example('person.title', 10)) jb
where rownum <= 10;

Query trên minh họa cách lấy nhiều loại dữ liệu mẫu khác nhau và kết hợp thành một bộ dữ liệu có thể dùng cho report hoặc insert vào bảng demo.

Ví dụ insert dữ liệu test vào bảng

Giả sử bạn có bảng demo_employees để test ứng dụng nhân sự. Bạn có thể dùng dữ liệu sinh tự động để insert nhanh nhiều dòng.

insert into demo_employees (
  first_name,
  last_name,
  email,
  job_title,
  created_at
)
select fn.column_value,
       ln.column_value,
       em.column_value,
       jb.column_value,
       sysdate
from table(apex_dg_data_gen.get_example('person.first_name', 50)) fn,
     table(apex_dg_data_gen.get_example('person.last_name', 50)) ln,
     table(apex_dg_data_gen.get_example('person.email', 50)) em,
     table(apex_dg_data_gen.get_example('person.title', 50)) jb
where rownum <= 50;

Sau khi insert, bạn có thể dùng bảng này để kiểm thử Classic Report, Interactive Report, Interactive Grid, form edit, dashboard hoặc quy trình approval.

Áp dụng cho ứng dụng bán hàng hoặc POS

Nếu bạn đang xây dựng ứng dụng POS, inventory hoặc order management trong Oracle APEX, dữ liệu test có thể bao gồm khách hàng, sản phẩm, đơn hàng, chi tiết đơn hàng và thanh toán.

Ví dụ, bạn có thể tạo bảng khách hàng mẫu:

insert into demo_customers (
  customer_name,
  email,
  phone_number,
  created_at
)
select fn.column_value || ' ' || ln.column_value as customer_name,
       em.column_value as email,
       ph.column_value as phone_number,
       sysdate
from table(apex_dg_data_gen.get_example('person.first_name', 100)) fn,
     table(apex_dg_data_gen.get_example('person.last_name', 100)) ln,
     table(apex_dg_data_gen.get_example('person.email', 100)) em,
     table(apex_dg_data_gen.get_example('person.phone_number', 100)) ph
where rownum <= 100;

Từ đó, bạn có thể tạo tiếp đơn hàng mẫu, dòng chi tiết đơn hàng mẫu và dữ liệu thanh toán mẫu. Khi có dữ liệu đủ phong phú, việc kiểm thử màn hình bán hàng, báo cáo doanh thu, tồn kho và lịch sử giao dịch sẽ thực tế hơn nhiều.

Tạo dữ liệu demo mà không làm lộ dữ liệu thật

Một lợi ích lớn của data generator là tránh phụ thuộc vào dữ liệu production. Trong môi trường dev, test hoặc demo, bạn không nên dùng dữ liệu thật nếu không có quy trình masking và kiểm soát bảo mật rõ ràng.

Dữ liệu giả lập giúp bạn trình bày ứng dụng cho khách hàng, đào tạo người dùng, test chức năng và kiểm tra giao diện mà không làm lộ thông tin nhạy cảm.

Đây là điểm đặc biệt quan trọng với các hệ thống có dữ liệu cá nhân, tài chính, y tế, nhân sự hoặc dữ liệu kinh doanh nội bộ.

Dùng trong APEX UI và SQL Workshop

Tùy phiên bản APEX và quyền truy cập, bạn có thể làm việc với khả năng tạo dữ liệu từ giao diện APEX hoặc gọi package bằng SQL/PLSQL. Với lập trình viên, cách dùng qua SQL rất linh hoạt vì có thể kết hợp trực tiếp với bảng, view, procedure hoặc script tạo dữ liệu demo.

Nếu chạy bên ngoài App Builder context, cần lưu ý rằng các API của package này yêu cầu APEX session. Khi đó bạn có thể cần tạo session bằng các API phù hợp trước khi gọi package.

Các nguyên tắc khi tạo dữ liệu test

Khi tạo dữ liệu test, bạn nên có một số quy tắc rõ ràng để tránh làm môi trường phát triển trở nên lộn xộn:

  • Đặt prefix hoặc cờ nhận biết dữ liệu demo nếu cần.
  • Không trộn dữ liệu demo với dữ liệu nghiệp vụ thật.
  • Có script dọn dữ liệu test sau khi sử dụng.
  • Tạo dữ liệu đủ lớn để kiểm tra hiệu năng, không chỉ vài dòng.
  • Tạo cả trường hợp bình thường và trường hợp biên.
  • Không đưa thông tin nhạy cảm vào dữ liệu demo.

Một bộ dữ liệu test tốt nên giúp bạn kiểm tra được cả giao diện, nghiệp vụ, hiệu năng và bảo mật.

Gợi ý cho dự án Oracle APEX thực tế

Trong dự án thật, bạn có thể tạo một package riêng, ví dụ demo_data_pkg, để gom các thủ tục tạo dữ liệu mẫu:

begin
  demo_data_pkg.create_customers(100);
  demo_data_pkg.create_products(50);
  demo_data_pkg.create_orders(200);
end;

Cách này giúp bạn tái tạo dữ liệu demo nhanh sau mỗi lần reset môi trường. QA, developer và người demo ứng dụng đều có thể dùng cùng một bộ dữ liệu nhất quán.

Với Dokhala hoặc các ứng dụng APEX học tập, bạn cũng có thể dùng cách này để tạo dữ liệu mẫu cho bài hướng dẫn, giúp người học nhìn thấy kết quả ngay mà không phải tự nhập dữ liệu thủ công.

Kết luận

APEX_DG_DATA_GEN là một công cụ rất hữu ích trong quá trình phát triển Oracle APEX. Nó giúp bạn tạo dữ liệu test nhanh hơn, thực tế hơn và an toàn hơn so với việc dùng dữ liệu thật.

Khi ứng dụng có dữ liệu đủ phong phú, bạn sẽ kiểm tra được report, form, dashboard, filter, validation và hiệu năng một cách chính xác hơn. Đây là một bước nhỏ nhưng có tác động lớn đến chất lượng tổng thể của ứng dụng APEX.