2012-03-09 52 views
6

Vấn đề của tôi không quá phức tạp, nhưng tôi là người mới đến PL/SQL.Vòng lặp PL/SQL thông qua con trỏ

Tôi cần thực hiện lựa chọn từ bảng COMPANIES dựa trên một số điều kiện nhất định. Sau đó, tôi cần lặp qua các trường này và chuyển đổi một số trường thành một định dạng khác (tôi đã tạo các hàm này) và cuối cùng sử dụng phiên bản được chuyển đổi này để tham gia vào bảng tham chiếu để có được biến số điểm tôi cần. Vì vậy, về cơ bản:

select id, total_empts, bank from COMPANIES where turnover > 100000 

vòng lặp thông qua lựa chọn

insert into MY_TABLE (select score from REF where conversion_func(MY_CURSOR.total_emps) = REF.total_emps) 

này này về cơ bản là những gì tôi đang tìm cách để làm. Nó phức tạp hơn một chút nhưng tôi chỉ tìm kiếm những điều cơ bản và cách tiếp cận nó để giúp tôi bắt đầu!

Trả lời

11

Đây là cú pháp cơ bản cho con trỏ vòng trong PL/SQL:

BEGIN 

    FOR r_company IN (
     SELECT 
      ID, 
      total_emps, 
      bank 
     FROM 
      companies 
     WHERE 
      turnover > 100000 
    ) LOOP 

     INSERT INTO 
      my_table 
     SELECT 
      score 
     FROM 
      ref_table 
     WHERE 
      ref.total_emps = conversion_func(r_company.total_emps) 
     ; 

    END LOOP; 

END; 
/
3

Bạn không cần phải sử dụng PL/SQL để làm điều này:

insert into my_table 
select score 
    from ref r 
    join companies c 
    on r.total_emps on conversion_func(c.total_emps) 
where c.turnover > 100000 

Nếu bạn phải làm điều này trong một vòng lặp PL/SQL như được hỏi, sau đó tôi đảm bảo rằng bạn làm ít công việc nhất có thể. Tuy nhiên, tôi khuyên bạn nên sử dụng bulk collect thay vì vòng lặp.

begin 

    for xx in (select conversion_func(total_emps) as tot_emp 
       from companies 
       where turnover > 100000) loop 

     insert into my_table 
     select score 
     from ref 
     where total_emps = xx.tot_emp 
      ; 

    end loop; 

end; 
/

Đối với cả hai phương pháp bạn cần một chỉ mục trên ref.total_emps và tốt nhất là trên companies.turnover

Các vấn đề liên quan