现有两张表
1、表A结构:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null2、表B结构(B表数据是永远不变的):
L_ACCT_ITEM_ID L_LOCATION_CODE L_JE_NAME X_ACCT_ITEM_ID X_LOCATION_CODE X_JE_NAME
3115 0B061304 CDMA来电显示功能费 1010 02010101 来电显示功能费
3113 0B061302 CDMA呼出限制功能费 1011 02010201 呼出限制
3107 0B060801 CDMA三方通话功能费 1015 02010205 三方通话
3114 0B061303 CDMA呼叫转移功能费 3652 02010209 呼叫转移
3112 0B061301 CDMA呼叫等待功能费 3480 02010211 呼叫等待
3248 0B061902 CDMA七彩号功能费 1032 02021401 七彩号功能使用费
3253 0B090102 CDMA96121气象费 1049 02030103 96121气象费
现在想要的结果是:当我想插入A表记录,如果a.ACCT_ITEM_ID在B表的L_ACCT_ITEM_ID中时,就把B表中的对应的X_LOCATION_CODE插入A中,
最终A插入的结果为:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null
ZS-LK1009 5006 1010 来电显示功能费 null求一存储过程,需要传入参数A表的seq前两位,谢谢!
1、表A结构:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null2、表B结构(B表数据是永远不变的):
L_ACCT_ITEM_ID L_LOCATION_CODE L_JE_NAME X_ACCT_ITEM_ID X_LOCATION_CODE X_JE_NAME
3115 0B061304 CDMA来电显示功能费 1010 02010101 来电显示功能费
3113 0B061302 CDMA呼出限制功能费 1011 02010201 呼出限制
3107 0B060801 CDMA三方通话功能费 1015 02010205 三方通话
3114 0B061303 CDMA呼叫转移功能费 3652 02010209 呼叫转移
3112 0B061301 CDMA呼叫等待功能费 3480 02010211 呼叫等待
3248 0B061902 CDMA七彩号功能费 1032 02021401 七彩号功能使用费
3253 0B090102 CDMA96121气象费 1049 02030103 96121气象费
现在想要的结果是:当我想插入A表记录,如果a.ACCT_ITEM_ID在B表的L_ACCT_ITEM_ID中时,就把B表中的对应的X_LOCATION_CODE插入A中,
最终A插入的结果为:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null
ZS-LK1009 5006 1010 来电显示功能费 null求一存储过程,需要传入参数A表的seq前两位,谢谢!
是不是如果记录在b中存在,则将b的插入
否则将原始输入数据插入?
而B表应该是张字典表吧?
插入过程中如果a.ACCT_ITEM_ID存在与B中就插入对应的信息。而如果不存在呢?(可能你的信息是一定存在的,不会有不存在的情况)。
那么你要插入的信息怎么来的,还是你要手工生产现在B表样的数据?
最终A插入的结果为:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null 这里面也没有看到那个code啊你干脆说哪个字段对应哪个字段好了。
A表结构:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
HZ1001 5001 3115 CDMA来电显示功能费 NULL
HZ1001 5001 3113 CDMA呼出限制功能费 NULL
HZ1001 5001 1071 主叫铃音功能费 NULLB表的结构:
L_ACCT_ITEM_ID L_JE_NAME X_ACCT_ITEM_ID X_JE_NAME
3115 CDMA来电显示功能费 1010 来电显示功能费
3113 CDMA呼出限制功能费 1011 呼出限制
3107 CDMA三方通话功能费 1015 三方通话
3114 CDMA呼叫转移功能费 3652 呼叫转移
3112 CDMA呼叫等待功能费 3480 呼叫等待
3248 CDMA七彩号功能费 1032 七彩号功能使用费
3253 CDMA96121气象费 1049 96121气象费 如果a.ACCT_ITEM_ID=b.L_ACCT_ITEM_ID,则把B.X_ACCT_ITEM_ID和B.X_JE_NAME插入到A中,
例如当A中有上面3条记录,则自动把
HZ1001 5001 1010 来电显示功能费 null
HZ1001 5001 1011 呼出限制 null
两条记录插入到A中(SEQ和ZHANGMU_ID不变),生成5条记录
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
HZ1001 5001 3115 CDMA来电显示功能费 NULL
HZ1001 5001 3113 CDMA呼出限制功能费 NULL
HZ1001 5001 1071 主叫铃音功能费 NULL
HZ1001 5001 1010 来电显示功能费 null
HZ1001 5001 1011 呼出限制 nullA中的RESTRICTION_GROUP_ID为null表示是新插入的记录
INSERT INTO a
(SEQ, ZHANGMU_ID, ACCT_ITEM_ID, ACCT_ITEM_DESCRIPTION, RESTRICTION_GROUP_ID)
SELECT SEQ, ZHANGMU_ID, B.X_ACCT_ITEM_ID, B.X_JE_NAME, NULL
FROM a, b
WHERE a.ACCT_ITEM_ID = b.L_ACCT_ITEM_ID;
in_seq_A IN A.SEQ%TYPE,
in_ZHANGMU_ID IN A.ZHANGMU_ID%TYPE,
in_ACCT_ITEM_ID IN A.ACCT_ITEM_ID%TYPE,
in_ACCT_ITEM_DESCRIPTION IN A.ACCT_ITEM_DESCRIPTION%TYPE,
in_RESTRICTION_GROUP_ID IN A.RESTRICTION_GROUP_ID%TYPE
) as
v_b_1 B.X_ACCT_ITEM_ID%TYPE;
v_b_2 B.X_JE_NAME%TYPE;
begin
insert into a (SEQ, ZHANGMU_ID, ACCT_ITEM_ID, ACCT_ITEM_DESCRIPTION, RESTRICTION_GROUP_ID)
values(in_seq_A,in_ZHANGMU_ID,in_ACCT_ITEM_ID,in_ACCT_ITEM_DESCRIPTION,in_RESTRICTION_GROUP_ID);
begin
select B.X_ACCT_ITEM_ID,B.X_JE_NAME into v_b_1,v_b_2 from b where b.L_ACCT_ITEM_ID = in_ACCT_ITEM_ID;
insert into a (SEQ, ZHANGMU_ID, ACCT_ITEM_ID, ACCT_ITEM_DESCRIPTION, RESTRICTION_GROUP_ID)
values(in_seq_A,in_ZHANGMU_ID,v_b_1,v_b_2,null);
exception when no_data_found then
null;
end;
exception when others then
raise;
end proc_ins_A;
/