需求
将老师一周中同一大节的课表信息整理到同一条记录里,不同星期对应不同的列。(涉及到字符串拼接、行转列)
常见的行转列函数有vm_concat、listagg、xmlagg等,但是oracle12g不支持vm_concat,而且前两个函数在拼接字符串的时候容易出现拼接结果过长、字符串缓冲区过小等问题,难搞。xmlagg就可以完美解决这个问题,拼接字段中出现null也不影响,唯一的不足就是多个null拼接时,xmlagg并不能自动省去,最后需要处理下多余的拼接符号,不然难看。
xmlagg函数用法
xmlagg函数需要将输入的值转换为xml,处理返回结果也是xml,最后再用getclobval()获取colb类型的结果。
xmlagg(xmlelement(表名, 输入值1,输入值2) order by 参数).extract('//text()').getclobval()
输入值就是要拼接的字段和连接符,顺序随意,xmlagg就是把两个输入值拼在一起,连接符在前在后都一样,最后都是要处理下多余的字符的
listagg函数用法
listagg(参数, '分隔符') within group(order by 参数)
vm_concat函数用法
vm_concat(参数)