我不認爲我想達到的是dar提取。從Oracle中檢索數據作爲Oracle中的表格
我只是想傳遞給程序的XML字符串,將其轉換爲一個表,使用它的查詢,但我具有XML轉換表的問題。
到目前爲止,這是我有
DECLARE
xmlVar CLOB := '<DocumentElement><XML_Result><GSID>22271</GSID><FROMCITY>LAREDO</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78040</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>RAMOSARIZPE</TOCITY><TOSTATE>CU</TOSTATE><TOPOSTAL>25000</TOPOSTAL><TOCOUNTRY>MX</TOCOUNTRY><TOTALMILES>194.9</TOTALMILES></XML_Result></DocumentElement>';
BEGIN
with routes AS (
Select extractvalue(column_value, '/XML_Result/GSID') GSID,
extractvalue(column_value, '/XML_Result/FROMCITY') FROMCITY,
extractvalue(column_value, '/XML_Result/FROMSTATE') FROMSTATE,
extractvalue(column_value, '/XML_Result/FROMPOSTAL') FROMPOSTAL,
extractvalue(column_value, '/XML_Result/FROMCOUNTRY') FROMCOUNTRY,
extractvalue(column_value, '/XML_Result/TOCITY') TOCITY,
extractvalue(column_value, '/XML_Result/TOSTATE') TOSTATE,
extractvalue(column_value, '/XML_Result/TOPOSTAL') TOPOSTAL,
extractvalue(column_value, '/XML_Result/TOCOUNTRY') TOCOUNTRY,
extractvalue(column_value, '/XML_Result/TOTALMILES') TOTALMILES
FROM TABLE(XMLSequence(XMLTYPE(xmlVar).extract('//XML_Result')))
) Select * from routes ;
END;
我認爲這應該工作。我還測試
declare
xmlClob CLOB;
begin
xmlClob := '<DocumentElement><XML_Result><GSID>22271</GSID><FROMCITY>LAREDO</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78040</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>RAMOSARIZPE</TOCITY><TOSTATE>CU</TOSTATE><TOPOSTAL>25000</TOPOSTAL><TOCOUNTRY>MX</TOCOUNTRY><TOTALMILES>194.9</TOTALMILES></XML_Result></DocumentElement>';
Select * from xmltable(
'//XML_Result'
PASSING xmltype.createxml(xmlClob)
COLUMNS GSID VARCHAR(100) PATH 'GSID',
FROMCITY VARCHAR(100) PATH 'FROMCITY',
FROMSTATE VARCHAR(100) PATH 'FROMSTATE',
FROMPOSTAL VARCHAR(100) PATH 'FROMPOSTAL',
FROMCOUNTRY VARCHAR(100) PATH 'FROMCOUNTRY',
TOCITY VARCHAR(100) PATH 'TOCITY',
TOSTATE VARCHAR(100) PATH 'TOSTATE',
TOPOSTAL VARCHAR(100) PATH 'TOPOSTAL',
TOCOUNTRY VARCHAR(100) PATH 'TOCOUNTRY',
TOTALMILES VARCHAR(100) PATH 'TOTALMILES') xms;
end;
兩個代碼返回我這個錯誤
PLS-00428:INTO子句預計在SELECT語句 06550. 00000 - 「行%S,列%S:\ n%s「 *原因:通常是PL/SQL編譯錯誤。 *操作:
但我不知道如何得到這個。另外,我無法創建表格,也不能創建臨時表格,而客戶卻限制了我可以或不可以做的許多事情。
任何想法,以實現我的預期結果?
PS:XML是一小片的什麼我的工作
編輯:
我只是測試這個
with routes AS (
Select extractvalue(column_value, '/XML_Result/GSID') GSID,
extractvalue(column_value, '/XML_Result/FROMCITY') FROMCITY,
extractvalue(column_value, '/XML_Result/FROMSTATE') FROMSTATE,
extractvalue(column_value, '/XML_Result/FROMPOSTAL') FROMPOSTAL,
extractvalue(column_value, '/XML_Result/FROMCOUNTRY') FROMCOUNTRY,
extractvalue(column_value, '/XML_Result/TOCITY') TOCITY,
extractvalue(column_value, '/XML_Result/TOSTATE') TOSTATE,
extractvalue(column_value, '/XML_Result/TOPOSTAL') TOPOSTAL,
extractvalue(column_value, '/XML_Result/TOCOUNTRY') TOCOUNTRY,
extractvalue(column_value, '/XML_Result/TOTALMILES') TOTALMILES
FROM TABLE(XMLSequence(XMLTYPE('<DocumentElement><XML_Result><GSID>22271</GSID><FROMCITY>LAREDO</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78040</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>RAMOSARIZPE</TOCITY><TOSTATE>CU</TOSTATE><TOPOSTAL>25000</TOPOSTAL><TOCOUNTRY>MX</TOCOUNTRY><TOTALMILES>194.9</TOTALMILES></XML_Result><XML_Result><GSID>24102</GSID><FROMCITY>DELRIO</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78840</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>REYNOSA</TOCITY><TOSTATE>TM</TOSTATE><TOPOSTAL>88787</TOPOSTAL><TOCOUNTRY>MX</TOCOUNTRY><TOTALMILES>325.4</TOTALMILES></XML_Result><XML_Result><GSID>23131</GSID><FROMCITY>BROWNSVL</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78521</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>EAGLEPS</TOCITY><TOSTATE>TX</TOSTATE><TOPOSTAL>78852</TOPOSTAL><TOCOUNTRY>US</TOCOUNTRY><TOTALMILES>326.3</TOTALMILES></XML_Result><XML_Result><GSID>21011</GSID><FROMCITY>EAGLEPS</FROMCITY><FROMSTATE>TX</FROMSTATE><FROMPOSTAL>78852</FROMPOSTAL><FROMCOUNTRY>US</FROMCOUNTRY><TOCITY>BROWNSVL</TOCITY><TOSTATE>TX</TOSTATE><TOPOSTAL>78521</TOPOSTAL><TOCOUNTRY>US</TOCOUNTRY><TOTALMILES>326.2</TOTALMILES></XML_Result></DocumentElement>').extract('//XML_Result')))
) Select * from routes;
我實現我的本意,我」 m得到一個表,我可以在另一個表中查詢子查詢,但問題是,XML不會這麼短。我當前的xml字符串長度超過4000個字符,所以我需要將它存儲到一個變量中,以便能夠完全使用它。我想,也許,一次發送的XML,5個寄存器的塊,並執行與每個XML塊的查詢,然後將結果附加到我的DataTable在C#中,但我寧願只發送整個XML一次並得到整個響應
好吧,我不能把它存儲在一個變量,我需要它以表格的形式,我不能因客戶端的限制 – CJLopez
那麼你應該怎麼做與創建表結果?你需要將它假脫機到一個文件,返回一些輸出參數,...? – Aleksej
我需要從這個XML中獲取一個表以便在另一個子查詢中使用。我更新了我的問題,以便更深入地瞭解我的意圖 – CJLopez