项目表中有个字段,名叫model_content,是CLOB类型,存贮如下格式的XML内容(简单例子,实际复杂得多):
<properties> 
<property   id= "subname1 "   name= "用户名1 ">  </property>
<property   id= "subname2 "   name= "用户名2 ">  </property> 
</properties> item节点有多个,我现在需要读出所有的iD和name;
说明只能用PL-SQL语句;

解决方案 »

  1.   

    既然你的内容都是XML格式了,最好就用oracle的xml type来保存,不用CLOB保存。
    用CLOB类型要读出ID,name相比就不方便了。
      

  2.   

    标题错误,应该是用SQL语句如何处理存贮在CLOB字段里的XML数据?? 
    CSDN居然不能修改标题,愤怒
      

  3.   

    to vc555老兄:
        不能改成Xmltype啦,已经不可更改。
      

  4.   

    这个能不能用CLOB全文检索?
    SELECT * FROM t
    WHERE DBMS_LOB.INSTR(t.列,'查找值',1,1)>0;但是不知道你那上面XML内容的“格式”怎么保存进去的?每一行存哪些数据?
      

  5.   

    to Vc555老兄:
       数据是已经存进去了,他们是按照clob存进去的,在PLsql developer里是双击该字段可以显示出XML节点的
      

  6.   

    具体就搞不懂了。不过我想还是用DBMS_LOB的相关过程函数来解决。
      

  7.   


    给你个方法,取出id和name,可以根据需要再加工.思路肯定是这样的.DROP TABLE tt;
    CREATE TABLE tt (n INT, m CLOB);
    INSERT INTO tt VALUES(1,'<properties> 
    <property  id= "subname1 "  name= "用户名1 ">  </property> 
    <property  id= "subname2 "  name= "用户名2 ">  </property> 
    </properties> ');
    INSERT INTO tt VALUES(1,'<properties> 
    <property  id= "subname1 "  name= "用户名1 ">  </property> 
    <property  id= "subname2 "  name= "用户名2 ">  </property> 
    <property  id= "subname3 "  name= "用户名3 ">  </property> 
    </properties> ');
    COMMIT;
     
    SELECT REGEXP_REPLACE(REGEXP_SUBSTR(EXTRACT(XMLTYPE(M),
                                                '/properties/property')
                                        .GETSTRINGVAL(),
                                        'id=".+" +name=".+"'),
                          '"/><property')
      FROM TT;
    输出:
     id="subname1 " name="用户名1  id="subname2 " name="用户名2 "
     id="subname1 " name="用户名1  id="subname2 " name="用户名2  id="subname3 " name="用户名3 "
      

  8.   

    我建议你还是写java或c存储过程吧
    貌似11g可以写.net存储过程,你就算用字符串操作实现了操作xml,我觉得那效率也不好吧。