使用第一个匹配时获取相同的列值然后INSERT INTO SELECT语句

时间:2018-06-05 12:46:54

标签: sql oracle stored-procedures plsql

在存储过程中,我使用列变量 v_col1 v_col2 t_col1 t_col2 。但根据业务要求,我使用了光标和放大器。采集。用于每个迭代记录的BULK COLLECT和游标的集合。但是当我声明上面的列变量并且我从 tbl1 存储 col1 的值, col2 tbl2 存储时select col1 into v_col1 from tbl1;select col2 into v_col2 from tbl1;。我已经声明了游标,所以我想要每个记录,它将同时处理多个。我想从 txt 表中获取数据并将其加载到main_table表中,然后在执行此存储过程后,我获得相同记录数的相同记录。

create or replace procedure sp_gr
as
    cursor c1 is select * from txt%rowtype;
    type record is table of txt%rowtype;  --Staging table
    v_rc record := record();
begin
    open c1;
    loop 
        fetch c1 bulk collect into v_rc limit 1000;

        loop
            for i in 1..v_rc.count loop
                ..........
               insert
                 when exists (select distinct 1 from txt
                              inner join tbl1 on tbl1.col1=txt.col1
                              inner join tbl2 on tbl2.col2=txt.col2) then 
                        into main_tbl(col1, ......)
                        values (v_rc(i).col1, ......)
                    when exists (select distinct 1 from txt
                              inner join tbl1 on tbl1.col1=txt.col1
                              inner join tbl2 on tbl2.col2=txt.col2
                                             AND tbl2.col3=txt.col3) then
                        into main_tbl(col1, ......)
                        values (v_rc(i).col1, ......)
                    else 
                        into main_tbl(col1, ......)
                        values (v_rc(i).col1, ......)
                select distinct * from txt;
                 ........

            end loop;
        exit when v_rc.count < limit;
    end loop;
    commit;
    close c1;
end sp_gr;

如何解决此问题,以便列变量一次只能获得一条记录,并且首先匹配,然后将记录从 txt 插入 main_tbl 并使用不同的值。你能帮我解决这个问题吗?感谢

0 个答案:

没有答案