Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle dbms_job.submit:Trộn Đồng bộ và Không đồng bộ

Cách tiếp cận đơn giản nhất có thể là sử dụng l_job tham số đầu ra từ dbms_job.submit và sau đó viết một vòng lặp để kiểm tra xem có bao nhiêu job đó các giá trị nằm trong dba_jobs , thoát ra khi số đếm là 0 và nếu không sẽ ở chế độ ngủ thông qua lệnh gọi tới dbms_lock.sleep trong một khoảng thời gian hợp lý. Rõ ràng, bạn cần tránh ghi đè l_job hiện tại để nắm bắt tất cả năm công việc. Một cái gì đó giống như

CREATE TYPE num_tbl
    AS TABLE OF NUMBER;

PROCEDURE refresh_all_MViews AS
  l_job       BINARY_INTEGER;
  l_jobs      num_tbl;
BEGIN
  l_jobs.extend(5);
  dbms_job.submit (l_job, ...) ;
  l_jobs(1) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(2) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(3) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(4) := l_job;
  dbms_job.submit (l_job, ...) ;
  l_jobs(5) := l_job;

  loop
    select count(*)
      into l_cnt
      from dba_jobs
     where job in (select column_value from table(l_jobs));

    if( l_cnt = 0 )
    then
      exit;
    end if;

    dbms_lock.sleep( 10 ); -- Sleep for 10 seconds
  end loop;

  refresh_Dependent_MViews;

END refresh_all_MViews;

Bây giờ, rõ ràng bạn có thể sửa đổi refresh_Independent_MViews thủ tục trả về tập hợp số công việc cần được theo dõi để refresh_all_mviews lệnh gọi thủ tục refresh_independent_mviews , triển khai vòng lặp, rồi gọi refresh_dependent_mviews .

Bạn có thể trở nên phức tạp hơn bằng cách yêu cầu công việc của bạn ghi vào một bảng ghi lại thành công hay thất bại hoặc gửi một thông báo qua Oracle AQ mà một quy trình khác sẽ lắng nghe để bắt đầu làm mới mview phụ thuộc. Điều đó có thể không cần thiết trong trường hợp này nhưng có thể là nếu các phụ thuộc của bạn ngày càng phức tạp hơn. Không nghi ngờ gì nữa, bạn cũng có thể tạo dbms_scheduler chuỗi sẽ làm điều này cho bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các kết hợp từ một bảng, được nhóm theo giá trị cột

  2. Loại bỏ tiêu đề cột vào tệp văn bản đầu ra

  3. Đặt hàng truy vấn Oracle theo SUM mà không chọn SUM

  4. Buộc phân biệt chữ hoa chữ thường của mã định danh trong oracle

  5. Làm cách nào để liệt kê TẤT CẢ các khoản trợ cấp mà người dùng nhận được?