2016-02-19 69 views
1

我們目前使用Oracle/PL/SQL和Oracle Forms WEB作爲用戶界面。將表記錄到PL/SQL中的Xml

問題是我們決定將UI從Forms遷移到另一個UI(可能是HTML5/Angular ...)。 我們的系統架構以批處理代碼保持不變的方式進行分層,我們所要做的就是從新技術訪問GUI Facade(仍然可以選擇)。問題是:所有這些GUI外牆提供(curretly到Oracle表格)中的數據像集合的結構:

TYPE tp_rc_cod IS RECORD( 
-- Return code 
cd_return NUMBER(2), 
-- Name 
cd_name some_table.name%TYPE 
); 
TYPE tp_table_rc_cod IS TABLE OF tp_rc_cod INDEX BY PLS_INTEGER; 

那麼,有沒有什麼辦法可以quicky從表中記錄轉換我們目前的GUI門面返回XML還是JSON? 我們考慮在新UI和當前GUI外觀的中間構建包裝器,但系統不小,因此可能很難構建,並可能存在性能問題。

我已經知道,Oracle JDBC驅動程序不支持使用非標量元素類型來調用參數或返回PL/SQL RECORD,BOOLEAN或表的值。但是,Oracle JDBC驅動程序通過標量元素類型表支持PL/SQL索引。如果發生這種情況,Oracle Forms如何做到這一點?它是否自己構建包裝?

有什麼建議嗎?

回答

0

IF你的類型是實際的Oracle類型(而不是封裝類型),你可以將它們轉換成含有類似的代碼的XML輸出一個CLOB到

declare 
l_tab tp_table_rc_cod := tp_table_rc_cod(); 
--new variables 
l_rc SYS_REFCURSOR; 
l_xmlctx number; 
l_new_retval CLOB; 
begin 


l_tab.extend(1); 
l_tab(1) := tp_rc_cod(1, 'testname'); 

--TABLE RETURN 
--return l_tab; 

-- XML RETURN 
open l_rc for select * from table(l_tab); 
l_xmlctx := SYS.DBMS_XMLGEN.NEWCONTEXT(l_rc); 

l_new_retval := dbms_xmlgen.getXML(l_xmlctx); 
DBMS_XMLGEN.closeContext(l_xmlctx); 
--return l_new_retval; 
end; 
/

但是當你看到它仍然是一些努力。還有其他DBMS_XMLGEN選項可能要設置。

我也認爲oracle 12確實刪除了「oracle type」的要求,但我不確定。

即時消息不確定是否完全回答你的問題,但我希望它可以幫助