【笔记】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()的形式

posted @ 2022-06-28 19:43  DbWong_0918  阅读(599)  评论(0)    收藏  举报