ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

时间:2023-01-03 23:31:39

ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小
ORA-06512:在"WMSYS.WM_CONCAT_IMPL",line 30

   记录一下,今天在合并订单号的时候出现了这个错误,想了很久没搞定,在网上搜了多种方法都没有解决(包括自定函数、用系统函数都不行),最后和公司的专业做数据库同事请教得以解决,如下:

 

  一开始用的:    

    SELECT a.ordercode, 
                    MAX(a.ordertime) as ordertime,
                    a.storename,
                    a.buyername,
                    a.orderstatus,
                    a.id,
                    a.ordertype AS OrderStatusType,
                    wmsys.wm_concat(d.name) AS B_NAME
              FROM  orderbase a
                    LEFT JOIN Orderdetail b ON a.id = b.orderid AND b.isdeleted = 0
                    LEFT JOIN productinfo c ON b.productid=c.id AND c.isdeleted=0
                    LEFT JOIN Categorybase d ON c.categoryid = d.id AND d.isdeleted = 0
                    LEFT JOIN Categorybrand e ON d.id = e.categoryid AND e.isdeleted = 0
                    LEFT JOIN brandbase f ON f.id=e.brandid AND f.isdeleted = 0
              WHERE a.IsDeleted=0
           GROUP BY a.id,
                    a.ordercode,
                    a.buyername,
                    a.storename,
                    a.orderstatus,
                    a.ordertype             

 

解决方案:

             SELECT a.ordercode, 
                    MAX(a.ordertime) as ordertime,
                    a.storename,
                    a.buyername,
                    a.orderstatus,
                    a.id,
                    a.ordertype AS OrderStatusType,
                    trim(both '','' from
                    sys.stragg(to_char(d.name) || nvl2(d.name, '','', ''''))) as B_NAME
              FROM  orderbase a
                    LEFT JOIN Orderdetail b ON a.id = b.orderid AND b.isdeleted = 0
                    LEFT JOIN productinfo c ON b.productid=c.id AND c.isdeleted=0
                    LEFT JOIN Categorybase d ON c.categoryid = d.id AND d.isdeleted = 0
                    LEFT JOIN Categorybrand e ON d.id = e.categoryid AND e.isdeleted = 0
                    LEFT JOIN brandbase f ON f.id=e.brandid AND f.isdeleted = 0
              WHERE a.IsDeleted=0
           GROUP BY a.id,
                    a.ordercode,
                    a.buyername,
                    a.storename,
                    a.orderstatus,
                    a.ordertype