如何使用Oracle XML DB WebServices将表作为行返回



我正在尝试使用XML DB Service 将Oracle表作为Web服务公开。我想根据Web服务的请求中的条件返回多行表。

以下 - :本机-Oracle-xml-db-web-services-11gr1

开发了一个过程,该过程将PK列作为输入,并将列作为输出返回。当返回是按列返回时,它可以工作。但是,当我尝试将完整的行作为类型返回时,它不起作用。

这在工作。

Web服务的URL - :http://域:8080/orawsv/test/test/get_test_tab?wsdl

create or replace PROCEDURE GET_TEST_TAB (
  p_id   IN  test_tab.id%TYPE,
  p_description   OUT test_tab.description%type) AS
  BEGIN
      SELECT description into p_description   FROM   test_tab
  WHERE  id = p_id;
END GET_TEST_TAB;

现在,我想返回test_tab表的多行,而无需硬编码列名。

我已将过程修改为

CREATE OR replace PROCEDURE P_TableAsWS_XMLIN_XMLOUT (
    p_in    IN XMLTYPE,
    p_out   OUT XMLTYPE
) AS
  BEGIN
--  cursor_ OUT SYS_REFCURSOR) AS
--  with data as
--(select '<a><c>1</c><c>2</c></a>' xmlval
-- from dual)
    SELECT
        XMLELEMENT(
            "employees",XMLAGG(XMLELEMENT(
                "employee",XMLFOREST(e.id AS "empno",e.description AS "ename")
            ) )
        ) 
    INTO p_out
    FROM
        test_tab e,
                XMLTABLE ( '/inp/*' PASSING  p_in 
                    COLUMNS
                        id  varchar(50)   PATH '/id'
                )  inp
WHERE
  e.id = inp.id  ;
end P_TableAsWS_XMLIN_XMLOUT;

传递输入 - :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://xmlns.oracle.com/orawsv/TEST/P_TABLEASWS_XMLIN_XMLOUT">
   <soapenv:Header/>
   <soapenv:Body>
      <p:P_TABLEASWS_XMLIN_XMLOUTInput>
         <p:P_OUT-XMLTYPE-OUT/>
         <p:P_IN-XMLTYPE-IN>
            <inp>
             <id>1</id>
             <id>2</id>
            </inp>
         </p:P_IN-XMLTYPE-IN>
      </p:P_TABLEASWS_XMLIN_XMLOUTInput>
   </soapenv:Body>
</soapenv:Envelope>

获取输出 -

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <P_TABLEASWS_XMLIN_XMLOUTOutput xmlns="http://xmlns.oracle.com/orawsv/TEST/P_TABLEASWS_XMLIN_XMLOUT">
         <P_OUT>
            <employees>
               <employee>
                  <empno>1</empno>
                  <ename>ONE</ename>
               </employee>
               <employee>
                  <empno>2</empno>
                  <ename>TWO</ename>
               </employee>
            </employees>
         </P_OUT>
      </P_TABLEASWS_XMLIN_XMLOUTOutput>
   </soap:Body>
</soap:Envelope>

问题是 - :

a(我已经在过程中手动添加了每列。 如果添加了任何新列,则需要修改过程

b(必须硬编码XMLTable输出列类型。 无法将列定义为table_name.colum_name%type

相关内容

  • 没有找到相关文章

最新更新