ループ内にループを持つ関数があり、「数値または値のエラー」が発生します。
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) ||