是否有將XMLType轉換爲用戶定義類型的簡單方法?我可以使用下面的方式將UDT轉換爲XMLType。將XML轉換爲Oracle中的UDT
select SYS_XMLGEN(pUDT) into param2 from dual;
我不能不過,是找到一個函數,它是使用使用的SYS_XMLGEN相同的映射把它放回該UDT。
是否有將XMLType轉換爲用戶定義類型的簡單方法?我可以使用下面的方式將UDT轉換爲XMLType。將XML轉換爲Oracle中的UDT
select SYS_XMLGEN(pUDT) into param2 from dual;
我不能不過,是找到一個函數,它是使用使用的SYS_XMLGEN相同的映射把它放回該UDT。
我知道這是舊的,但有一種方法可以將XMLType轉換回UDT。如果沒有提供模式,它將使用Cannonical映射。儘管Gary的觀點非常有效,但如果它非常複雜,您可能必須自定義代碼,但假設您擁有一個簡單對象,則可以簡單地完成代碼。 (我還沒有與所述模式映射也不提前特徵發揮各地
create OR REPLACE type udtToXmlAndBack AS OBJECT(AA varchar2(50) , BB NUMBER);
variable x refcursor
SET SERVEROUTPUT ON
DECLARE
pUDT udtToXmlAndBack;
newUDTFromXml udtToXmlAndBack;
xData xmlType ;
BEGIN
pUDT := NEW udtToXmlAndBack('ABC',10) ;
DBMS_OUTPUT.PUT_LINE('pUDT.AA = ' || pUDT.AA || '; pUDT.BB = ' || pUDT.BB);
SELECT SYS_XMLGEN(pUDT) into xData FROM DUAL;
xData.toobject(newUDTFromXml);
DBMS_OUTPUT.PUT_LINE('newUDTFromXml.AA = ' || newUDTFromXml.AA || '; newUDTFromXml.BB = ' || newUDTFromXml.BB);
open :x for
select pUDT initUDT, xData xmlData,newUDTFromXml udtFromXML from dual;
END ;
/
PRINT :X;
和現在的輸出:
anonymous block completed
pUDT.AA = ABC; pUDT.BB = 10
newUDTFromXml.AA = ABC; newUDTFromXml.BB = 10
X
------------------------------------
INITUDT
------------------------------------
mySchema.UDTTOXMLANDBACK('ABC',10)
--------------------
xmlData
--------------------
<?xml version="1.0"?>
<ROW>
<AA>ABC</AA>
<BB>10</BB>
</ROW>
--------------------
UDTFROMXML
--------------------
mySchema.UDTTOXMLANDBACK('ABC',10)
這是使用「toObject」關閉XmlType將的。 以下是我在此主題上找到的其他幾個鏈接: http://technology.amis.nl/blog/6131/oracle-sql-and-plsql-juggling-with-user-defined-types-adt-and-xmltype-for-creating-an-adt-based-xml-service-api & http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:19049264697122
編輯
這是比任何人都更適合我{從最初的回答是「不可能」 - >這是可以,甚至對複雜類型},但我不得不使用xmltype.toobject與架構上的一個相當複雜的XML/XSD文件和它的工作像廣告(包括類型等內創建數組類型的(和類型類型內)
xx.toobject(xxx,'http://schema/doc','RootDoc');
我會說在技術上你不能。
例如
select sys_xmlgen(mdsys.sdo_geometry(1,2,mdsys.sdo_point_type(1,2,3),null,null))
from dual;
返回
<?xml version="1.0"?>
<ROW>
<SDO_GTYPE>1</SDO_GTYPE>
<SDO_SRID>2</SDO_SRID>
<SDO_POINT>
<X>1</X>
<Y>2</Y>
<Z>3</Z>
</SDO_POINT>
</ROW>
並沒有什麼在XML來表示或者(a)它是一種類型MDSYS.SDO_GEOMETRY,或(b)的子對象SDO_GTYPE等等都在MDSYS模式中。
我想你會希望你自己的方法對象類型(或者你自己的函數,如果你沒有控制的對象代碼,如MDSYS)將對象轉換爲/從XML。也就是說,我可能會從SYS_XMLGEN的輸出開始。
我在同樣的印象。一位同事有一種想法將XML類型傳遞給UDT的構造函數。儘管整個思維過程都是爲了一個新過程而廢除的。儘管謝謝你的回答! – Josh 2010-03-12 17:48:31