【发布时间】:2023-10-24 17:20:01
【问题描述】:
我正在通过 Oracle Service Bus 中的 DB 适配器调用一个过程。我可以使用 SYS_REFCURSOR 作为 OUT 参数从 PL 中选择多行。
/*Package Specification*/
create or replace PACKAGE ACC_HIER AS
PROCEDURE f_Hier(
IN_T_CODE IN HIER.T_CODE%TYPE,
H_DETAILS OUT SYS_REFCURSOR);
END ACC_HIER;
/*Package Body*/
create or replace PACKAGE BODY ACC_HIER AS
PROCEDURE f_Hier(
IN_T_CODE IN HIER.T_CODE%TYPE,
H_DETAILS OUT SYS_REFCURSOR) AS
BEGIN
OPEN H_DETAILS FOR
SELECT T_LEVEL,T_CODE,P_ID,P_NAME,LAST_UPDATE_DATE
FROM HIER
WHERE T_CODE = IN_T_CODE
ORDER BY T_LEVEL;
EXCEPTION
WHEN OTHERS
THEN dbms_output.put_line('No Rows Found');
END f_Hier;
END ACC_HIER;
当我通过 DB 适配器导入包时,它会自动生成弱 xsd:
<schema targetNamespace="http://xmlns.test.com/pcbpel/adapter/db/sp/DB_AccHierarchy_Pkg" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:db="http://xmlns.test.com/pcbpel/adapter/db/sp/DB_AccHierarchy_Pkg" elementFormDefault="qualified">
<element name="InputParameters">
<complexType>
<sequence>
<element name="IN_T_CODE" type="string" db:index="1" db:type="VARCHAR2" minOccurs="0" nillable="true"/>
</sequence>
</complexType>
</element>
<element name="OutputParameters">
<complexType>
<sequence>
<element name="H_DETAILS" type="db:RowSet" db:index="2" db:type="RowSet" minOccurs="0" nillable="true"/>
</sequence>
</complexType>
</element>
<complexType name="RowSet">
<sequence>
<element name="Row" minOccurs="0" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="Column" maxOccurs="unbounded" nillable="true">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="name" type="string" use="required"/>
<attribute name="sqltype" type="string" use="required"/>
</extension>
</simpleContent>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</schema>
属性是通用的,当我们执行 DB Adapter 时,输出如下:
<Row>
<Column name="T_LEVEL" sqltype="NUMBER">1</Column>
<Column name="T_CODE" sqltype="VARCHAR2">XYZ</Column>
<Column name="P_ID" sqltype="NUMBER">13214</Column>
<Column name="P_NAME" sqltype="VARCHAR2">XYZ_1 Limited</Column>
<Column name="LAST_UPDATE_DATE" sqltype="TIMESTAMP">2015-07-01T09:21:27.901107+05:30</Column>
</Row>
<Row>
<Column name="T_LEVEL" sqltype="NUMBER">2</Column>
<Column name="T_CODE" sqltype="VARCHAR2">XYZ</Column>
<Column name="P_ID" sqltype="NUMBER">156219</Column>
<Column name="P_NAME" sqltype="VARCHAR2">XYZ_2 Limited</Column>
<Column name="LAST_UPDATE_DATE" sqltype="TIMESTAMP">2015-07-02T09:21:27.901107+05:30</Column>
</Row>
要求:我希望生成的XSD类似于下面的sn-p:
<complexType>
<element name="T_LEVEL" type="decimal" nillable="true"/>
<element name="T_CODE" type="string" nillable="true"/>
<element name="P_ID" type="decimal" nillable="true"/>
<element name="P_NAME" type="string" nillable="true"/>
<element name="LAST_UPDATE_DATE" type="dateTime" nillable="true"/>
</complexType>
和输出类似:
<Row>
<T_LEVEL>1</T_LEVEL>
<T_CODE>XYZ</T_CODE>
<P_ID>13214</P_ID>
<P_NAME>XYZ_1 Limited</P_NAME>
<LAST_UPDATE_DATE>2015-07-01T09:21:27.901107+05:30</LAST_UPDATE_DATE>
</Row>
<Row>
<T_LEVEL>2</T_LEVEL>
<T_CODE>XYZ</T_CODE>
<P_ID>156219</P_ID>
<P_NAME>XYZ_2 Limited</P_NAME>
<LAST_UPDATE_DATE>2015-07-02T09:21:27.901107+05:30</LAST_UPDATE_DATE>
</Row>
数据库适配器有什么方法可以自动生成所需格式的 XSD? 程序中的哪些变化可以让我获得所需的结果?任何替代解决方案?
【问题讨论】:
标签: xml stored-procedures plsql soa osb