我有一个在循环内有一个循环的函数,我收到“数字或值错误”。
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: 数值或数值错误 ORA-06512: 在 "ASM.XXXX", 第 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) ||