我们目前使用Oracle / PL / SQL和Oracle Forms WEB作为用户界面。
问题是我们决定将UI从Forms迁移到另一个UI(可能是HTML5 / Angular ......)。 我们的系统架构以一种批量代码保持不变的方式分层,我们所要做的就是从新技术中访问GUIFaçade(仍然需要选择)。问题是:这个GUIFaçade提供的所有数据(当前是Oracle Forms)都是在以下集合中构建的:
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;
那么,有没有办法快速将当前GUIFaçade的返回值从表记录转换为XML或JSON? 我们考虑在新UI和当前GUIFaçade的中间构建一个Wrapper,但是系统不小,所以它可能变得很难构建并且可能存在性能问题。
我已经知道Oracle JDBC驱动程序支持调用参数或返回PL / SQL RECORD,BOOLEAN或具有非标量元素类型的表的值是不可行的。但是,Oracle JDBC驱动程序支持标量元素类型的PL / SQL索引表。如果发生这种情况,例如Oracle Forms如何做到这一点?它是否构建了Wrapper本身?
有什么建议吗?
答案 0 :(得分: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类型”的要求,但我不确定。
我不确定是否完全回答了你的问题,但我希望有所帮助