データベースからXMLを取得するクエリを作成しましたが、XMLデータがクエリから正しく取得されています。 しかし、関数/プロシージャからXMLデータを取得するためにそのクエリをプロシージャ/関数に入れようとすると、結果にはXMLデータを含むいくつかの迷惑データが含まれます。 これは、XSLTがガベージデータで使用できないため、XMLを役に立たなくします。私は間違ってFunction/ProcedureからXML出力が正しく出力されない
SELECT XMLELEMENT(
"department",
XMLFOREST(
e.dept_id AS "dept_id",
d.dept_name AS "dept_name"
),
XMLAGG(
XMLELEMENT(
"employee",
XMLFOREST(
emp_id AS "emp_id",
emp_name AS "emp_name"
)
)
)
)
FROM employees e
INNER JOIN departments d
on (e.dept_id = d.dept_id)
WHERE e.dept_id = 1
GROUP BY e.dept_id, d.dept_name;
このクエリ与えたいXMLデータ
<department>
<dept_id>1</dept_id>
<dept_name>History</dept_name>
</department>
<employee>
<emp_id>1</emp_id>
<emp_name>Helen</emp_name>
</employee>
<employee>
<emp_id>2</emp_id>
<emp_name>Martha</emp_name>
</employee>
<employee>
<emp_id>3</emp_id>
<emp_name>John</emp_name>
</employee>
しかし、我々は手順でこのクエリを置くとき/それは間違ったデータをとして出て見せて機能をやっているところ
あなたがチェックしてくださいすることができcreate or replace function test_cursor return sys_refcursor
is
c_result sys_refcursor;
po varchar2(20);
begin
select headerid into po from staging_orderheader where rownum=1;
open c_result for
SELECT XMLELEMENT(
"department",
XMLFOREST(
e.dept_id AS "dept_id",
d.dept_name AS "dept_name"
),
XMLAGG(
XMLELEMENT(
"employee",
XMLFOREST(
emp_id AS "emp_id",
emp_name AS "emp_name"
)
)
)
)
FROM employees e
INNER JOIN departments d
on (e.dept_id = d.dept_id)
WHERE e.dept_id = 1
GROUP BY e.dept_id, d.dept_name;
return c_result;
end;
この手順の結果は、クエリのXMLデータですが、いくつかのg開始時には値を返します。 助けてください
機能がREF_CURSORを返し、あなただけの結果を解析することはできませんカーソルをvarchar2またはclobに戻し、関数からそれを戻しますか? ref_cursorを返す関数から有効なXMLを取得するのはなぜでしょうか? – g00dy
質問を、作成中の(不正な形式の)出力と、プロシージャの呼び出しに使用しているコードの例で編集してください。 – MT0