环境:Oracle Express 11g
我开发了一个Oracle存储过程,以xml格式从表中返回多个记录。不幸的是,它适用于单个记录。对于多个记录,它返回错误
ORA-01427:单行子查询返回多行
请建议如何修复错误。
create or replace function view_to_xml return clob as
xml xmltype;
data clob;
begin
select XMLELEMENT("PERSONS",
(
select XMLELEMENT("PERSON",
XMLELEMENT("SNO",SNO),
XMLELEMENT("NAME",name),
XMLELEMENT("AGE",AGE)
) as "result" from person
)
) into xml from dual;
SELECT XMLSerialize(DOCUMENT xml AS CLOB) into data FROM DUAL;
return data;
end ;
答案 0 :(得分:0)
而不是将每个元素从查询包装到人
select XMLELEMENT("PERSONS", XMLAGG(person_))
into xml
from
(
select XMLELEMENT("PERSON",
XMLELEMENT("SNO",SNO),
XMLELEMENT("NAME",name),
XMLELEMENT("AGE",AGE)) as person_
from person
);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test checkbox</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script src="js/1.9.2/jquery-ui-min.js"></script>
</head>
<body>
<input type="checkbox" class="example" />
<input type="checkbox" class="example" />
<input type="checkbox" class="example" />
<input type="checkbox" class="example" />
<script language="JavaScript" type="text/JavaScript">
$('input.example').on('change', function() {
$('input.example').not(this).prop('checked', false);
});
</script>
</body>
</html>
答案 1 :(得分:0)
Stawros,谢谢你的建议。我尝试过但无法使用XMLAGG解决问题。我能够以不同的方式解决问题。这是解决方案
create or replace function view_to_xml return clob as
xml xmltype;
ctx dbms_xmlgen.ctxhandle;
resultset sys_refcursor;
begin
open resultset for
select * from PERSONS;
ctx := dbms_xmlgen.newcontext(resultset);
dbms_xmlgen.setrowsettag(ctx, 'PERSONS');
dbms_xmlgen.setrowtag(ctx, 'PERSON');
xml:= dbms_xmlgen.getxmltype(ctx);
dbms_xmlgen.closecontext(ctx);
close resultset;
return xml.getStringVal();
end