我在大一部分中使用这部分代码:
SELECT DISTINCT
P.SKU, SUBSTR(X.ATTRIBUTENAME, 14, 3) ATTRIBUTECODE, X.ATTRIBUTEVALUE
FROM
PRODUCT@ISPSTAG2 P,
XMLTABLE('/attrs/attr'
PASSING XMLTYPE(REGEXP_REPLACE(P.ATTRIBUTES_DE_AT, '<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) = 'AT'
AND SKU NOT LIKE 'OFF_%' AND SKU NOT LIKE 'PDT%'
AND ATTRIBUTES_DE_AT IS NOT NULL;
它会引发ORA-22992
错误。
我已经进行了一些研究,并且提示可以使用双重功能
SELECT DISTINCT P.SKU, SUBSTR(X.ATTRIBUTENAME, 14, 3) ATTRIBUTECODE, X.ATTRIBUTEVALUE
FROM PRODUCT@ISPSTAG2 P,
XMLTABLE('/attrs/attr'
PASSING XMLTYPE(REGEXP_REPLACE(P.ATTRIBUTES_DE_AT, '<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) = 'AT'
AND SKU NOT LIKE 'OFF_%' AND SKU NOT LIKE 'PDT%'
AND (SELECT ATTRIBUTES_DE_AT FROM DUAL) IS NOT NULL;
但是现在我收到ORA-06502 / ORA-06512错误:
ORA-06502:PL / SQL:Val urer ur ererur numeréurvaler
ORA-06512:à“ SYS.XMLTYPE”,ligne 272
ORA-06512:àligne 1
06502. 00000-“ PL / SQL:数值或数值错误%s”
*原因:发生算术,数字,字符串,转换或约束错误。例如,如果尝试将值NULL分配给声明为NOT NULL的变量,或者试图将大于99的整数分配给声明的NUMBER(2),则会发生此错误。
*操作:更改数据,如何操作或声明数据,以使值不违反约束。
但是,我在ISPSTAG2上执行了第一个,并且可以正常工作,但是在ISPSTAG2上的第二个返回了相同的ORA-06502 / ORA-06512错误,因此问题出在双重子查询上。
我还尝试使用DBMS_LOB.SUBSTR在ISPSTAG2上创建一个具有4000个字符但有相同错误的视图。
有什么想法吗?谢谢。
答案 0 :(得分:0)
如果忘记使用XMLTYPE中的(SELECT ATTRIBUTES_DE_AT FROM DUAL)子查询...
SELECT DISTINCT P.SKU, SUBSTR(X.ATTRIBUTENAME, 14, 3) ATTRIBUTECODE, X.ATTRIBUTEVALUE
FROM PRODUCT@ISPSTAG2 P,
XMLTABLE('/attrs/attr'
PASSING XMLTYPE(REGEXP_REPLACE(**(SELECT ATTRIBUTES_DE_AT FROM DUAL)**, '<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) = 'AT'
AND SKU NOT LIKE 'OFF_%' AND SKU NOT LIKE 'PDT%'
AND (SELECT ATTRIBUTES_DE_AT FROM DUAL) IS NOT NULL;
我不明白的是,当不在IS NOT NULL过滤器中使用子查询时,出现ORA-22992错误(使用远距离LOB),所以为什么我有一个不同的错误而不使用双重子查询,这是相同的远程LOB吗?
随时为您提供时间/帮助:)