请教高手:一个关于UPDATE的问题(从一个表中查询多条记录并存与另一个对应表中)

陈年椰子 2002-11-29 11:40:31
我用的是8.0.5
表A:
TEL_NO , POST_JL
138001 200207FP
138001 200208ZD
138001 200209FP
138004 200207ZD
138004 200209ZD

表B:
TEL_NO , POST_MEM
138001
138004

需要的结果
TEL_NO , POST_MEM
138001 , 200207FP;200208ZD;200209FP
138004 , 200207ZD;200209ZD

可以用UPDATE语句完成吗?
如果可以,如何写
...全文
47 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈年椰子 2002-12-31
  • 打赏
  • 举报
回复
多谢beckhambobo(beckham)!
陈年椰子 2002-12-31
  • 打赏
  • 举报
回复
为什么我不能把帖子放到FAQ里?
beckhambobo 2002-12-30
  • 打赏
  • 举报
回复
create or replace function get(p_id in varchar2) return varchar2 is
Result varchar2(100);

cursor rad_cursor(v_id varchar2) is
select POST_JL from A
where TEL_NO=v_id order by POST_JL;
v_count Number;
begin
v_count:=0;
Result:='';
for v_sor in rad_cursor(p_id) loop
if v_count=0 then
Result:=v_sor.POST_JL;
v_count:=v_count+1;
else
Result:=Result||';'||v_sor.POST_JL;
end if;
end loop;
return(Result);
end get;
/

update B set POST_MEM=(select get(TEL_NO) from A where POST_JL=B.POST_MEM)
beckhambobo 2002-12-30
  • 打赏
  • 举报
回复
把那函数相应修改就可用了,或者要等我有时间再可以帮你测试.
beckhambobo 2002-12-30
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1305/1305563.xml?temp=.1603815
陈年椰子 2002-12-30
  • 打赏
  • 举报
回复
还有没有人能回答呀, 不然就结贴了
年底了, 要结帐了 :)
bbfc1979 2002-12-03
  • 打赏
  • 举报
回复
execute
陈年椰子 2002-12-03
  • 打赏
  • 举报
回复
谢谢 bbfc1979()

还有问题:
执行后能把POST-MEM变成 如此格式吗: 200207FP;200208ZD;200209FP

set post_mem = (select POST_JL
from table_b where TEL_NO = rec_test.TEL_NO )
是不是要改成 for loop 的形式, 加个变量什么的,谁能告诉我如何改呀 ,
陈年椰子 2002-12-02
  • 打赏
  • 举报
回复
在 Sql WorkSheet 中如何执行一个procedure ?
陈年椰子 2002-12-02
  • 打赏
  • 举报
回复
set post_mem = (select POST_JL
from table_b where TEL_NO = rec_test.TEL_NO )

是不是要改成 for loop 的形式, 谁能告诉我如何改呀 ,
陈年椰子 2002-12-02
  • 打赏
  • 举报
回复
liqiangliu(liqiangliu) ( )
执行后能把POST-MEM变成 如此格式吗?
200207FP;200208ZD;200209FP
jlandzpa 2002-11-29
  • 打赏
  • 举报
回复
很难实现,写个函数吧.
biti_rainy 2002-11-29
  • 打赏
  • 举报
回复
一句sql无法实现的!
liqiangliu 2002-11-29
  • 打赏
  • 举报
回复
create or replace procedure ProcedureName
is


cursor cur_test is
select * from table table_a
for update;

begin
for rec_test in cur_test loop
update table_a
set post_mem = (select POST_JL
from table_b where TEL_NO = rec_test.TEL_NO )
where current of cur_test;
end loop;
commit;
end;
beckhambobo 2002-11-29
  • 打赏
  • 举报
回复
看来这个问题比较多人问,板主是否写一个函数放在板面上,让有需要的人
huangcaibing 2002-11-29
  • 打赏
  • 举报
回复
用函数比较容易
yuxuan 2002-11-29
  • 打赏
  • 举报
回复
需要用到循环,用游标,可以写存储过程实现

17,377

社区成员

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

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