现有两张表
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前两位,是什么意思?
    是不是如果记录在b中存在,则将b的插入
    否则将原始输入数据插入?
      

  2.   

    有点糊涂,你的A表是在什么情况下做插入动作的?
    而B表应该是张字典表吧?
    插入过程中如果a.ACCT_ITEM_ID存在与B中就插入对应的信息。而如果不存在呢?(可能你的信息是一定存在的,不会有不存在的情况)。
    那么你要插入的信息怎么来的,还是你要手工生产现在B表样的数据?
      

  3.   

    就把B表中的对应的X_LOCATION_CODE插入A中,
    最终A插入的结果为:
    SEQ  ZHANGMU_ID  ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
    ZS-LK1009 5006 3115 CDMA来电显示功能费 null 这里面也没有看到那个code啊你干脆说哪个字段对应哪个字段好了。
      

  4.   

    不好意思,没描述清楚,如下:
    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表示是新插入的记录
      

  5.   

    --一个语句就行吧,确定你要写入的时机
    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;
      

  6.   

    不知道对不对,你没有说存储过程输入参数是什么create or replace procedure proc_ins_A(
    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;
    /
      

  7.   

    输入的参数是A.seq的前两位,即‘ZS’,先谢谢了