我得到了错误:
Line/Col: 24/13
PLS-00103: Encountered the symbol ";" when expecting one of the following: (
尝试编译函数时:
create or replace function xml_sum (innXML XMLType, outXML XMLType) RETURN number
IS
sum NUMBER := 0;
BEGIN
FOR j IN
(SELECT y.feature, rownum
FROM XMLTABLE
('//FeatureVector/feature'
PASSING outXML
COLUMNS
feature NUMBER PATH '.') y)
LOOP
FOR i IN
(SELECT x.feature, rownum rn
FROM XMLTABLE
('//FeatureVector/feature'
PASSING innXML
COLUMNS
feature NUMBER PATH '.') x WHERE rn = j.rownum)
LOOP
sum := i.feature + j.feature;
END LOOP;
END LOOP;
RETURN sum;
END;
/
错误似乎我错过了一个“;”但我无法找到错过的地方。
有人能说出来吗?这肯定会有所帮助!
提前致谢!!
答案 0 :(得分:2)
您正在使用Oracle保留的关键字SUM
。更改别的内容,您的问题就解决了。
也在这个地方:
WHERE rn = j.ROWNUM
你直接在where子句中引用了一个列别名,这是不允许的。要么您需要外部查询,要么可以直接使用它。您可以在下面看到我如何使用它:
所以你的代码变成了:
CREATE OR REPLACE FUNCTION xml_sum (innXML XMLTYPE, outXML XMLTYPE)
RETURN NUMBER
IS
ToT_SUM NUMBER := 0;
BEGIN
FOR j
IN ( SELECT y.feature, ROWNUM
FROM XMLTABLE ('//FeatureVector/feature'
PASSING outXML
COLUMNS feature NUMBER PATH '.') y)
LOOP
FOR i
IN ( SELECT x.feature, ROWNUM rn
FROM XMLTABLE ('//FeatureVector/feature'
PASSING innXML
COLUMNS feature NUMBER PATH '.') x
WHERE ROWNUM= j.ROWNUM)
LOOP
ToT_SUM := i.feature + j.feature;
END LOOP;
END LOOP;
RETURN ToT_SUM;
END;
/
答案 1 :(得分:1)
您的解决方案无效:
SELECT *
FROM any_table
WHERE ROWNUM = 2
除此之外,@ XING还注意到其他一些问题,并且您在每次迭代中覆盖sum
变量中的值,因此您只获得最后一个值。
您应该能够重写该过程以消除对游标循环的需求:
Oracle 11g R2架构设置:
CREATE FUNCTION xml_sum(
innXML XMLType,
outXML XMLType
) RETURN number
IS
total NUMBER := 0;
BEGIN
SELECT SUM( y.feature + x.feature )
INTO total
FROM XMLTABLE(
'//FeatureVector/feature'
PASSING outXML
COLUMNS rn FOR ORDINALITY,
feature NUMBER PATH '.'
) y
INNER JOIN
XMLTABLE(
'//FeatureVector/feature'
PASSING innXML
COLUMNS rn FOR ORDINALITY,
feature NUMBER PATH '.'
) x
ON ( x.rn = y.rn );
RETURN total;
END;
/
查询1 :
SELECT xml_sum(
XMLTYPE( '<FeatureVector><feature>1</feature><feature>2</feature></FeatureVector>' ),
XMLTYPE( '<FeatureVector><feature>1</feature><feature>2</feature></FeatureVector>' )
) AS total
FROM DUAL
<强> Results 强>:
| TOTAL |
|-------|
| 6 |