Oracle DB 中有一個程序,它采用日期范圍并為每一天生成 XML 檔案,回傳型別為 ref cursor。
從 C# 代碼呼叫該程序時,我無法從游標中提取 XML。任何指標都將有助于如何提取 XML
下面給出的是從程序呼叫回傳 XML 作為 ref 游標的查詢的小示例。
PROCEDURE GET_XML_DATERANGE(
start_date IN DATE,
end_date IN DATE,
p_cursor_xml OUT SYS_REFCURSOR
)
IS
V_CURSOR SYS_REFCURSOR;
BEGIN
OPEN V_CURSOR FOR
WITH DATES AS(
SELECT (to_date(start_date ,'yyyy-mm-dd') rownum -1) as d_date
FROM ALL_OBJECTS
WHERE rownum <= to_date(end_date,'yyyy-mm-dd')-to_date(start_date,'yyyy-mm-dd') 1
)
SELECT XMLELEMENT("ExampleXML",
XMLATTRIBUTES('1.1.1.1' AS "version",
REPLACE(to_char((d.d_date),'yyyy-mm-dd HH:MM:SS'),' ','T') AS "timeStamp"
)) from DATES d;
p_cursor_xml := V_CURSOR ;
END GET_XML_DATERANGE;
根據查詢,它為作為參考游標回傳的每個日期回傳多個 XML。只是想要一些關于如何從 ref 游標中提取多個 xml 的指標,這將是 C# 代碼的輸出引數。
uj5u.com熱心網友回復:
您的代碼有一些問題(包括呼叫TO_DATE已經是日期的值)并且可以更簡單;但是,主要更改是呼叫.getStringVal()創建的元素,因為這會將其從XMLTYPE資料型別轉換為VARCHAR2字串,然后您可以像從回傳的游標的每一行中獲取任何其他字串一樣獲取 XML:
CREATE PROCEDURE GET_XML_DATERANGE(
start_date IN DATE,
end_date IN DATE,
p_cursor_xml OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN p_cursor_xml FOR
SELECT XMLELEMENT(
"ExampleXML",
XMLATTRIBUTES(
'1.1.1.1' AS "version",
to_char(TRUNC(start_date) LEVEL - 1, 'yyyy-mm-dd"T"HH24:MI:SS')
AS "timeStamp"
)
).getStringVal() AS xml
FROM DUAL
CONNECT BY LEVEL <= TRUNC(end_date)-TRUNC(start_date) 1;
END GET_XML_DATERANGE;
/
如果您生成的資料太大而無法VARCHAR2使用,請.getClobVal()改用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493459.html
