我想将数据插入表中。
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位生产