Вкл. Oracle База данных 12 c Standard Edition, выпуск 12.1.0.2.0 - 64-битное производство. Я пытаюсь получить имена и значения атрибутов и сравнить их.
Вот запрос, который я сделал ( будь осторожен: D):
SELECT ENV1.SKU,
ENV1.ATTRIBUTECODE ATTRIBUTECODE,
ENV1.ATTRIBUTEVALUE ATTRIBUTEVALUE_ENV1,
ENV2.ATTRIBUTEVALUE ATTRIBUTEVALUE_ENV2,
CASE
WHEN ENV1.ATTRIBUTEVALUE IS NULL THEN 'ATTRIBUT MANQUANT SUR ENV1'
WHEN ENV2.ATTRIBUTEVALUE IS NULL THEN 'ATTRIBUT MANQUANT SUR ENV2'
WHEN ENV1.ATTRIBUTEVALUE != ENV2.ATTRIBUTEVALUE THEN 'MODIFICATION'
END DIFF
FROM (SELECT DISTINCT P.SKU, SUBSTR(X.ATTRIBUTENAME, 14, 3) ATTRIBUTECODE, X.ATTRIBUTEVALUE
FROM PRODUCT P,
XMLTABLE('/attrs/attr'
PASSING XMLTYPE(REGEXP_REPLACE(P.ATTRIBUTES_FR_FR, '<attr name="longDescription">.*?<\/attr>'))
COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '@name',
ATTRIBUTEVALUE VARCHAR2(4000) PATH '/string'
) X
WHERE X.ATTRIBUTENAME LIKE 'Z_CA%'
AND P.UUID IN (SELECT UUID FROM PRODUCT
WHERE DN(DOMAINID) = 'FR'
AND SKU NOT LIKE 'OFF_%' AND SKU NOT LIKE 'PDT%'
AND ATTRIBUTES_FR_FR IS NOT NULL)) ENV1
FULL JOIN (SELECT DISTINCT P.SKU, SUBSTR(X.ATTRIBUTENAME, 14, 3) ATTRIBUTECODE, X.ATTRIBUTEVALUE
FROM PRODUCT@ENV2 P,
XMLTABLE('/attrs/attr'
PASSING XMLTYPE(REGEXP_REPLACE(P.ATTRIBUTES_FR_FR, '<attr name="longDescription">.*?<\/attr>'))
COLUMNS ATTRIBUTENAME VARCHAR2(50) PATH '@name',
ATTRIBUTEVALUE VARCHAR2(4000) PATH '/string'
) X
WHERE X.ATTRIBUTENAME LIKE 'Z_CA%'
AND DN(DOMAINID) = 'FR'
AND SKU NOT LIKE 'OFF_%' AND SKU NOT LIKE 'PDT%'
AND (SELECT ATTRIBUTES_FR_FR FROM DUAL) IS NOT NULL) ENV2
ON ENV1.SKU = ENV2.SKU
AND ENV1.ATTRIBUTECODE = ENV2.ATTRIBUTECODE
WHERE (ENV1.ATTRIBUTEVALUE IS NULL OR ENV2.ATTRIBUTEVALUE IS NULL OR ENV1.ATTRIBUTEVALUE != ENV2.ATTRIBUTEVALUE)
ORDER BY ENV1.SKU ASC;
Но есть ошибка:
ORA-06502: PL/SQL: numeric or value error string
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
Когда я пробую часть ENV1 на EV1, она работает, когда пробую деталь ENV2 без двойного включения ENV2 тоже работает, но когда я пробую часть ENV2 на ENV1, используя @ ENV2 и двойной, у меня та же ошибка, и мне нужно использовать двойной, потому что, если я не использую его, есть эта ошибка:
ORA-22992: cannot use LOB locators selected from remote tables
Использование дуала что-то меняет, но я не знаю что. В некоторых странах это работает, в некоторых - нет, не всегда.
Может ли кто-нибудь помочь падавану?
Спасибо.