Oracle中的Select中的ORA-19011

时间:2019-09-27 09:47:07

标签: select oracle11g

我有一条选择语句会引发错误

ORA-19011:字符串缓冲区太小

选择如下

SELECT Substr(Rtrim (Xmlagg (Xmlelement (e, Concat(message_text, ' '))).extract 
                     ( 
                            '//text()'), 
                            ' '), 0, 256) message_text, 
       mobile_number, 
       tran_date, 
       parent_tran_acct_no 
FROM   custom.mobee_push_sms_drc 
WHERE  bank_id = '43' 
       AND status = 'A' 
       AND mobile_number <> '243' 
       AND mobile_number LIKE '243%' 
GROUP  BY mobile_number, 
          tran_date, 
          parent_tran_acct_no 

请帮助更正sql。

1 个答案:

答案 0 :(得分:1)

您似乎错过了GetClobVal

  SELECT SUBSTR (
            RTRIM (
               XMLAGG (XMLELEMENT (e, CONCAT (MESSAGE_TEXT, ' '))).EXTRACT (
                  '//text()').GetClobVal (),                                      --> here
               ' '),
            0,
            256)
            MESSAGE_TEXT,
         mobile_number,
         tran_date,
         parent_tran_acct_no
    FROM custom.mobee_push_sms_drc
   WHERE     bank_id = '43'
         AND status = 'A'
         AND mobile_number <> '243'
         AND mobile_number LIKE '243%'
GROUP BY mobile_number, tran_date, parent_tran_acct_no

如果没有它,Oracle会尝试将XMLtype转换为VARCHAR2而不是CLOB,这样结果就不合适了。