ようこそ (Jyokoso) MY BLOG

いらっしゃいませ (hajimemashite) สำหรับผู้เข้าใหม่นะค่ะ ^^V

14 กันยายน 2555

Bulk Load Oracle 10G

declare
    l_cnt   pls_integer := 20;
    l_start number;
    l_run   number;
begin
    l_start := dbms_utility.get_time;
          for i in 1..l_cnt loop
                   explicit_cursor; <<  Cursor…open loop…
fetch into
          end loop;
    l_run := dbms_utility.get_time - l_start;
    dbms_output.put_line ('run 1 in .... '||l_run||' hsecs');
    
    l_start := dbms_utility.get_time;
          for i in 1..l_cnt loop
                    implicit_cursor_1; <<  Cursor…for loop
          end loop;
    l_run := dbms_utility.get_time - l_start;
    dbms_output.put_line ('run 2 in .... '||l_run||' hsecs');
    
    l_start := dbms_utility.get_time;
          for i in 1..l_cnt loop
                    implicit_cursor_2; <<  for (select)loop
          end loop;
    l_run := dbms_utility.get_time - l_start;
    dbms_output.put_line ('run 3 in .... '||l_run||' hsecs');
    
    l_start := dbms_utility.get_time;
          for i in 1..l_cnt loop
                    explicit_cursor_bulk; <<  Cursor…open loop…fetch…
bulk collect into…limit
          end loop;
    l_run := dbms_utility.get_time - l_start;
    dbms_output.put_line ('run 4 in .... '||l_run||' hsecs');
end;
run 1 in .... 311 hsecs <<  explicit_cursor แย่สุด
run 2 in .... 18 hsecs <<  implicit_cursor_1

เท่ากัน * หมายเหตุ ถ้าไม่ใช้ Ver. 10g ขึ้นไป 
 จะมีความเร็วไม่ต่างจากแบบที่ 1 มากนัก 
จะเร็วเพียงเล็กน้อย แต่ถ้าเป็น 10g 
 มีการปรับปรุง for loop ให้เป็นแบบ array
run 3 in .... 18 hsecs <<  implicit_cursor_2
run 4 in .... 14 hsecs << explicit_cursor_bulk ดีสุด

12 กันยายน 2555

merge into using on


MERGE
     INTO  target_table tgt
     USING source_table src
     ON  ( src.object_id = tgt.object_id )
  WHEN MATCHED -- เมื่อ match กัน คือเมื่อ src.object_id = tgt.object_id
  THEN -- update data ให้ name และ type ของ table target_table = name
          และ type ของ table source_table
      UPDATE
      SET   tgt.object_name = src.object_name
      ,     tgt.object_type = src.object_type
   WHEN NOT MATCHED -- เมื่อไม่ match กัน คือเมื่อ src.object_id != tgt.object_id 
   THEN --insert data จาก table source_table ลง table target_table
      INSERT ( tgt.object_id
             , tgt.object_name
             , tgt.object_type )
      VALUES ( src.object_id
             , src.object_name
             , src.object_type );