请教一个ORACLE递归的问题

zapdos 2010-07-05 09:15:48
准备数据
create table properties(c_key varchar(300),c_value varchar(300),c_remark varchar(300));
insert into properties values('path.share.staticAppendence','"$path.share"/static_appendence.jsp','');
insert into properties values('path.share','"$test"/WEB-INF/share','');
insert into properties values('test','111','');

select b.c_key,b.c_value,b.c_remark,decode(prior v1,null,c_value,replace(to_char(prior v1),'"$'||c_key||'"',c_value)) v1,prior v1 from (select a.*,c_value v1 from properties a) b start with c_key='path.share.staticAppendence' connect by instr(prior c_value,'"$'||c_key||'"')<>0

我本来想通过这样一条递归句子,将c_value列进行参数化处理的,格式是将"$c_key"替换为表中包含的c_key对应的值
本以为将新的值插入到旧的列中,就能替换掉旧的值,没想到我想错了,使用的还是旧的值
1 path.share.staticAppendence "$path.share"/static_appendence.jsp "$path.share"/static_appendence.jsp
2 path.share "$test"/WEB-INF/share "$test"/WEB-INF/share/static_appendence.jsp "$path.share"/static_appendence.jsp
3 test 111 111/WEB-INF/share "$test"/WEB-INF/share

本来我期望的第3行 prior v1为"$test"/WEB-INF/share/static_appendence.jsp的,没想到竟然返回了"$test"/WEB-INF/share
请问如何处理,谢谢
请确实阅读了题目再回答,谢谢
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zapdos 2010-08-11
  • 打赏
  • 举报
回复
算了,CSDN没一个人能回答问题的我要
xiaohu8855 2010-07-07
  • 打赏
  • 举报
回复
这是10g的写法,9i没有测试环境
wm_concat这个是连接用的,上网查下就知道9i怎么用了,你该结贴了
zapdos 2010-07-05
  • 打赏
  • 举报
回复
这样说吧
我有一个表
t(key,value)
key value
---------
a1 "$a2"test1
a2 "$a3"test2
a3 test3
我想实现
查找a1的值时,能够通过递归,将其中的参数转换为表中的值
比方说我要a1的时候,能查到test3test2test1这样的结果
我要a2的时候,能查到test2test1这样的结果
谢谢
zapdos 2010-07-05
  • 打赏
  • 举报
回复
晕,我不是说了
准备数据
create table properties(c_key varchar(300),c_value varchar(300),c_remark varchar(300));
insert into properties values('path.share.staticAppendence','"$path.share"/static_appendence.jsp','');
insert into properties values('path.share','"$test"/WEB-INF/share','');
insert into properties values('test','111','');

xiaohu8855 2010-07-05
  • 打赏
  • 举报
回复
你发错帖了,这个应该发到oracle区的,还有你的描述不清楚,把你的数据和所要求的结果贴出来,别人也好帮你回答
select * from properties;
c_key c_value c_remark
path.share.staticAppendence "$path.share"/static_appendence.jsp
path.share "$test"/WEB-INF/share
test 111
后面的没看懂,还有prior v1 是什么表?
zapdos 2010-07-05
  • 打赏
  • 举报
回复
wm_concat是啥?偶数据库里无法识别
忘了说我的数据库是oracle9i
xiaohu8855 2010-07-05
  • 打赏
  • 举报
回复
select replace(wm_concat(substr(a.c_value,instr(a.c_value,'/'))),',') from properties a where a.c_key in (
select hh.c_key from (
select b.c_key,substr(b.c_value,3,instr(b.c_value,'/')-4) abc from properties b) hh start with hh.c_key='path.share' connect
by prior hh.c_key=hh.abc)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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