繁体   English   中英

PL/SQL: 循环中的数字或值错误 %s

[英]PL/SQL: numeric or value error%s in loop

我有一个在循环内带有循环的函数,但出现“数字或值错误”。

sendXML CLOB;

 FOR p IN (
      SELECT ID, NAME, GUID FROM products
      WHERE ID = IN_PROJECT_ID
      )
    LOOP

    if p.ID is not null and p.NAME is not null then

     sendXML := sendXML || '<product type="product" id="' || p.ID|| '" name="' || p.NAME || '">';

     FOR t IN (
      SELECT
        identifier ATTR_IDENTIFIER, 
        label ATTR_LABEL, 
      CASE type
        WHEN UPPER('STRING') THEN TRIM(string_value)
        WHEN UPPER('NUMBER') THEN TRIM(TO_CHAR(number_value))
      ELSE '' END ATTR_VALUE
      FROM products_data
      WHERE 
        product_id = p.ID AND
        identifier is not null
      ORDER BY identifier
      )

    LOOP

      sendXML := sendXML || '<attribute identifier="' || t.ATTR_IDENTIFIER || '" label="'|| t.ATTR_LABEL || '">' || t.ATTR_VALUE || '</attribute>';        

    END LOOP;

   END IF;

END LOOP;

错误

ORA-06502: PL/SQL:numeric or value error ORA-06512: at "ASM.XXXX", line 85 06502
06502. 00000 - “PL/SQL:数字或值错误 %s”

为该行抛出:

 sendXML := sendXML || '<product type="product" id="' || p.ID|| '" name="' || p.NAME || '">';

但我发现如果我删除最后一个

sendXML := sendXML || '<attribute identifier="' || t.ATTR_IDENTIFIER || '" label="'|| t.ATTR_LABEL || '">' || t.ATTR_VALUE || '</attribute>';      

我没有收到任何错误。

问题出在哪里?


解决方案:

p.ID 是整数,必须是字符... TO_CHAR(p.ID) 解决了我的问题!

sendXML := sendXML || '<product type="product" id="' || TO_CHAR(p.ID) ||

我的猜测是该字符串变得大于 PL/SQL 中varchar2的最大值。

尝试以下操作将文本附加到 clob:

 dbms_lob.append(sendXML, to_clob('<product type="product" id="' || p.ID|| '" name="' || p.NAME || '">'));

第二个:

 dbms_lob.append(sendXML, to_clob('<attribute identifier="' || t.ATTR_IDENTIFIER || '" label="'|| t.ATTR_LABEL || '">' || t.ATTR_VALUE || '</attribute>'));

使用引号运算符,如

sendXML := sendXML || q'[<attribute identifier=']' || t.ATTR_IDENTIFIER || q'[' label=']'|| t.ATTR_LABEL || q'['>]' || t.ATTR_VALUE || q'[</attribute>]'; 

逃避报价。 查看错误是否仍然存在

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM