当no_data_found或dup_val_on_index然后不插入时,将数据插入表中

时间:2015-06-26 13:39:19

标签: database plsql oracle11g plsqldeveloper

我想将数据插入表中。

 create table test_a (svc_id, ent_id, val);


insert into table test_a (10060, 84181, Cartoon_Network);

insert into table test_a (30064, 84181, Cartoon_Network);

insert into table test_a (322648, 84181, 93);

insert into table test_a(359668, 84181, 45);

insert into table test_a(316280, 84181, 93);

insert into table test_a(316279,84181,161);

使用这些数据我需要将VAL列的值检查到另一个表中,如: -

create table ref_data(ref_cd varchar2(50), ref_desc varchar2(50)); 

test_a表中的所有列都不为空;

insert into ref_data values(Cartoon_Network, Cartoon_Network_desc);

insert into ref_data values(93, NET Facil HD );

insert into ref_data values(45, 6 Estrelas);

现在我们有了数据,我需要用

再次填充test_a表

ent_id = 84182(硬编码)

并且VAL列将是值 -

select ref_desc from ref_data where ref_cd = (val from the test_a column for each sub_id)

所以现在我们有了所有的值来向test_a插入一个新行;

在这里,我们必须检查是否找不到数据,然后不应该插入任何行,或者如果dup_val_on_index也不应该插入。

我写了像

这样的代码
declare

cursor c_test is select * from test_a;

l_rec c_test%rowtype;

l_ent    number := 84182;

l_desc  varchar2(50);

begin

open c_test;

loop

fetch c_test into l_rec;

begin

select ref_desc into l_desc from ref_data where ref_cd = l_rec.val;

insert into test_a values (l_rec.sub_id, l_ent, l_desc);

exception

when no_data_found then

  null;

when dup_val_on_index then

 null;

end;

exit when c_test%notfound;

end loop;

exception

when others then

dbms_output.put_line(sqlcode||' '||sqlerrm);

end;

但是这段代码并没有按照我的预期运作。

DATABASE版本:

Oracle Database 11g企业版11.2.0.3.0版 - 64位生产

0 个答案:

没有答案