执行以下查询时,我得到oracle ORA-00913:值太多错误。
SELECT qst.QUE_NAME,
(SELECT sec2.SECTION_NAME AS "sectionName",
sec2.SECTION_ID_PK AS "sectionId",
sec2.SECTION_SEQUENCE AS "sequence",
CASE(sec2.ENABLE_SCORING)
WHEN '1'
THEN 'true'
ELSE 'false'
END AS "hasScore",
sec2.SECTION_WEIGHTAGE,
sec2.SEC_TOTAL_SCR_WEIGHTAGE,
sec2.SECTION_TYPE
FROM MS_XRQ_SECTION sec2
WHERE sec2.section_category=2
AND sec2.SECTION_QUESTNR_FK=qst.INTERNAL_QUESTNR_ID
)
FROM MS_XRQ_QUESTIONNAIRE qst
WHERE qst.INTERNAL_QUESTNR_ID= 'Questionnaire-3032';
当我使用硬编码值'Questionnaire-3032'
运行第二个select语句(位于方括号内)时,它将返回正确的结果。
当我运行以下查询时,它也会返回1条记录。
SELECT qst.QUE_NAME FROM MS_XRQ_QUESTIONNAIRE qst WHERE qst.INTERNAL_QUESTNR_ID= 'Questionnaire-3032';
因此,这两个独立查询运行良好。但是,当我要将其结果合并为一个时,会出现此错误。我无法理解我在这里做错了!谁能告诉我为什么会这样?
我还要将此查询传递给dbms_xmlgen.getxmltype()
函数,以获取类似于以下内容的输出。
<question>
<name> Q1</name>
<sections>
<section> s1</section>
<section> s2</section>
</sections>
<questions>
答案 0 :(得分:2)
当我运行带有硬编码值“ Questionnaire-3032”的第二个select语句(位于方括号内)时,它将返回正确的结果。
那是因为它作为独立过程是完全有效的。它在原始查询中失败的原因是您将其嵌入到查询投影中。这是受支持的构造,但只能用作标量游标:子查询的投影中有多个列。
您尚未发布任何示例数据,因此我对您想要的内容做了一些猜测。但是,此SQL XML解决方案会生成一个有效的XML文档,并且看上去与问题中的框架相匹配。
SELECT XMLELEMENT("Questionnaire",
XMLAGG (
XMLELEMENT("Question",
XMLFOREST(
qst.QUE_NAME AS "Name",
(SELECT XMLAGG(
XMLELEMENT("Section",
XMLFOREST(
sec2.SECTION_NAME AS "sectionName",
sec2.SECTION_ID_PK AS "sectionId",
sec2.SECTION_SEQUENCE AS "sequence",
CASE(sec2.ENABLE_SCORING)
WHEN '1'
THEN 'true'
ELSE 'false'
END AS "hasScore",
sec2.SECTION_WEIGHTAGE,
sec2.SEC_TOTAL_SCR_WEIGHTAGE,
sec2.SECTION_TYPE
)
)
)
FROM MS_XRQ_SECTION sec2
WHERE sec2.section_category = 2
AND sec2.SECTION_QUESTNR_FK = qst.INTERNAL_QUESTNR_ID
) "sections"
)
)
)
)
FROM MS_XRQ_QUESTIONNAIRE qst
WHERE qst.INTERNAL_QUESTNR_ID= 'Questionnaire-3032';
我已经在SQL Fiddle here上发布了一个演示,但不幸的是,GUI在oracle.xdb.XMLTypeFactory
上的表现不佳:(
答案 1 :(得分:1)
标量子查询只能返回一列和一行。
例如,您可以执行以下操作:
select (select 1 from dual) as c1
from dual;
但是您不能这样做:
select (select 1, 2 from dual) as thiswontwork
from dual;