在对oracle里字段生成xml语句时,
table_a有field1 field2 field3这三个字段,如果我们想要生成一个<item attr_a =" field_1_value" attr_b = "field_2_value" attr_c ="field_3_value">这样我们就要写的sql
select xmlelement("item",xmlattributes(field1 as "attr_a" field2 as "attr_b" field3 as "attr_c")) from table_a t这样我们就生成了clob格式的xml语句,如果我们要转化成字符串来方便操作的话,在xmlelement前面加一个substr,这样我们就可以转化成字符串,在这里substr(string,1)用这种方便我们就可以不指定长度,让xml全面显示成字符串方式,当然在使用xmlelement时,如果field_2里为空时,这样的<item attr_a =" field_1_value" attr_c ="field_3_value">这样的xml语句了,attr_b就消失了,这是让人蛮郁闷的,所以我们通过一个nvl()这样函数,把字段为空都变为" "字段有一个空格,这样我们成select xmlelement("item",xmlattributes(nvl(field1,' ') as "attr_a" nvl(field2,' ') as "attr_b" nvl(field3,' ') as "attr_c")) from table_a这样我们的结果就成了<item attr_a =" field_1_value" attr_c =" "> attr_c ="field_3_value"> 接下来,就我们就去空格,这个我们就replace来转化一下就好了, select replace(xmlelement("item",xmlattributes(nvl(field1,' ') as "attr_a" nvl(field2,' ') as "attr_b" nvl(field3,' ') as "attr_c")) ,'" "', '""') from table_a这样转化以后我们就会发现,这样已经转成了字符串方式,还是蛮好的。
在oracle编程里发现在使用||这个连接标志符时,如果我们 string1 := string2||string3这样我就可以用string2与string3合并,但是这样就有一个问题,如果string2或string3当中有一个为空时,这样我操作就会出错,这样我们就要多做一步操作要判断string2与string3是否为空的情况,这样的写法就非常不方便,而我们可以用select string2||string3 into string1 from dual通过select方式可以不用去判断是否为空,这样就很方便,对于多个字符串合并的情况来说。
在oracle编程是我们可能会经常使用到select field into string from table这种情况,在使用into时我们可能有两个问题,一是如果查询到的是多条数据时,这样在into 一个string里面就会出错,这样的话,我们可以
select field into string from table where rownum <=1 来解决只取一条记录的情况,第二种情况就是sselect field into string from table where rownum <=1里面返回的是为空,这样就没有into到string也是会出错,这里我们就要使用 select nvl((sselect field from table where rownum <=1),'field is null') into string from dual我们能过dual这个万用表与nvl来做判断,如果为空时,这里是用'field is null'写入string里面。这样可以根据要求来写