准备数据
           create table properties(c_key varchar(300),c_value varchar(300),c_re 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_re,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
请问如何处理,谢谢
请确实阅读了题目再回答,谢谢

解决方案 »

  1.   

    你发错帖了,这个应该发到oracle区的,还有你的描述不清楚,把你的数据和所要求的结果贴出来,别人也好帮你回答
    select * from properties;
    c_key                           c_value                               c_re
    path.share.staticAppendence "$path.share"/static_appendence.jsp
    path.share                 "$test"/WEB-INF/share
    test                         111
    后面的没看懂,还有prior v1 是什么表?
      

  2.   

    晕,我不是说了
    准备数据
      create table properties(c_key varchar(300),c_value varchar(300),c_re 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','');么
      

  3.   

    这样说吧
    我有一个表
    t(key,value)
    key value
    ---------
    a1  "$a2"test1
    a2  "$a3"test2
    a3  test3
    我想实现
    查找a1的值时,能够通过递归,将其中的参数转换为表中的值
    比方说我要a1的时候,能查到test3test2test1这样的结果
    我要a2的时候,能查到test2test1这样的结果
    谢谢
      

  4.   

    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)
      

  5.   

    wm_concat是啥?偶数据库里无法识别
    忘了说我的数据库是oracle9i
      

  6.   

    这是10g的写法,9i没有测试环境 
    wm_concat这个是连接用的,上网查下就知道9i怎么用了,你该结贴了 
      

  7.   

    算了,CSDN没一个人能回答问题的我要