我想在10gR2中實現一個堆棧數據結構。Oracle:在包中創建一個對象類型數組
但是,當我嘗試做:
創建或替換TYPE ContainerArray AS VARRAY(25)XDB.DBMS_XMLDOM.DOMNODE的;
我得到
「模式級別類型有非法參考XDB.DBMS_XMLDOM。」
所以我想通了,這是因爲Oracle不會讓你創建一個引用包級別類型的模式級別類型。
我可以通過創建包內的類型解決這個問題:
TYPE ContainerArray AS VARRAY(25) OF XDB.DBMS_XMLDOM.DOMNODE;
但是,後來當我嘗試創建我的對象,我不能引用包級別類型:
CREATE TYPE DOMNode_Stack AS OBJECT (
max_size INTEGER,
top INTEGER,
position ContainerArray,
MEMBER PROCEDURE initialize,
MEMBER FUNCTION full RETURN BOOLEAN,
MEMBER FUNCTION empty RETURN BOOLEAN,
MEMBER PROCEDURE push (n IN INTEGER),
MEMBER PROCEDURE pop (n OUT INTEGER)
);
,我不能創建包內的對象類型,因爲我得到
「對象不在此CON支持文本。」
有關如何解決此問題的任何想法?
感謝您的回覆。我能夠獲得創建的對象。現在我遇到的一個問題是在類型之間進行轉換。例如,當調用my_stack.push(my_node)時,我得到'錯誤的數量或類型的參數',因爲push被定義爲採用RAW,my_node是DOMNODE。但DOMNODE實際上是一個RAW(13)。我如何讓Oracle允許交換使用這些類型? CAST()不會像它會起作用。 – wadesworld
創建一個局部變量,如:'v_dom DBMS_XMLDOM.DOMNode'然後像'v_dom.id:= t_array(idx)'(其中t_array是你的sql數組,idx是當時處理的數組元素)一樣分配。 – DazzaL
不幸運。 '表達式是錯誤的類型'我想知道如果我將不得不使用SQL從這個VARRAY插入和刪除元素。 – wadesworld