求一存储过程

liukang1022 2010-01-26 01:16:45
现有两张表
1、表A结构:
SEQ ZHANGMU_ID ACCT_ITEM_ID ACCT_ITEM_DESCRIPTION RESTRICTION_GROUP_ID
ZS-LK1009 5006 3115 CDMA来电显示功能费 null

2、表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前两位,谢谢!
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liukang1022 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 crazylaa 的回复:]
不知道对不对,你没有说存储过程输入参数是什么。。。

SQL codecreateorreplaceprocedure proc_ins_A(
in_seq_AIN A.SEQ%TYPE,
in_ZHANGMU_IDIN A.ZHANGMU_ID%TYPE,
in_ACCT_ITEM_IDIN A.ACCT_ITEM_ID%TYPE,
in_ACCT_ITEM_DESCRIPTIONIN A.ACCT_ITEM_DESCRIPTION%TYPE,
in_RESTRICTION_GROUP_IDIN A.RESTRICTION_GROUP_ID%TYPE
)as
v_b_1 B.X_ACCT_ITEM_ID%TYPE;
v_b_2 B.X_JE_NAME%TYPE;begininsertinto 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);beginselect B.X_ACCT_ITEM_ID,B.X_JE_NAMEinto v_b_1,v_b_2from bwhere b.L_ACCT_ITEM_ID= in_ACCT_ITEM_ID;insertinto 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);
exceptionwhen no_data_foundthennull;end;
exceptionwhen othersthen
raise;end proc_ins_A;/
[/Quote]
输入的参数是A.seq的前两位,即‘ZS’,先谢谢了
crazylaa 2010-01-26
  • 打赏
  • 举报
回复
不知道对不对,你没有说存储过程输入参数是什么。。。

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;
/
liukang1022 2010-01-26
  • 打赏
  • 举报
回复
A表是多个人同时用的,想在另一个程序里面直接调用此过程,不用每次手工去插
tangren 2010-01-26
  • 打赏
  • 举报
回复
--一个语句就行吧,确定你要写入的时机
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;
liukang1022 2010-01-26
  • 打赏
  • 举报
回复
不好意思,没描述清楚,如下:
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 主叫铃音功能费 NULL

B表的结构:
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 呼出限制 null

A中的RESTRICTION_GROUP_ID为null表示是新插入的记录
crazylaa 2010-01-26
  • 打赏
  • 举报
回复
就把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啊。。。你干脆说哪个字段对应哪个字段好了。
lengyunfei006 2010-01-26
  • 打赏
  • 举报
回复
有点糊涂,你的A表是在什么情况下做插入动作的?
而B表应该是张字典表吧?
插入过程中如果a.ACCT_ITEM_ID存在与B中就插入对应的信息。而如果不存在呢?(可能你的信息是一定存在的,不会有不存在的情况)。
那么你要插入的信息怎么来的,还是你要手工生产现在B表样的数据?
liukang1022 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tangren 的回复:]
需要传入参数A表的seq前两位,是什么意思?
是不是如果记录在b中存在,则将b的插入
否则将原始输入数据插入?
[/Quote]
是的,a表seq是我定的
tangren 2010-01-26
  • 打赏
  • 举报
回复
需要传入参数A表的seq前两位,是什么意思?
是不是如果记录在b中存在,则将b的插入
否则将原始输入数据插入?
suiziguo 2010-01-26
  • 打赏
  • 举报
回复
我咋一看一像触发器?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧