【笔记】Oracle使用笔记 0-sql injection&&&result of string concatenation is too long
报错:数据库操作错误。"27,34006/v1:0-sql injection(SQL注入)
出现这个报错的情况背景是使用后端函数进行前端SQL语句组合进行数据插入的时候的提示
不太清楚是因为SQL语句插入数据还是因为往前端中写入SQL语句导致的
因为事情有点多,就暂时搁置不管了
后面从网上查了下,疑似是代码注入导致的?缓冲区的问题导致的?
后来发现自己的SQL语句中的视图可能比较复杂,在尝试使用别的小的视图进行使用的时候发现可以使用
于是将整个视图分为三个不同的视图以后分别进行语句的编写
然后就好了,所以大概是因为视图的问题?挺奇怪的
报错:result of string concatenation is too long
究其原因,使用listagg进行分组拼接时,oracle对字符变量的长度限制,而listagg 拼接返回的类型为varchar ,最大长度为4000,当报错信息太长的时候就会导致字段超出
解决方法就是换个方式
原先的:
listagg('上层:'||XXX||'、明细:'||XXX||'、上层为:'||XXX||'、明细为:'||XXX||chr(10),',')
更改后
xmlagg(xmlparse(content('上层:'||XXX||'、明细:'||XXX||'、上层为:'||XXX||'、明细为:'||XXX||chr(10))||',')).getclobval()
就是将listagg换成xmlagg(xmlparse(content(数据||分隔符)).getclobval()的形式
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接

浙公网安备 33010602011771号