【问题标题】:How to return Table as a row using Oracle XML DB Webservices如何使用 Oracle XML DB Webservices 将表作为一行返回
【发布时间】:2019-11-18 15:41:56
【问题描述】:

我正在尝试使用 XML DB 服务将 Oracle 表公开为 Web 服务。 我想根据 Web 服务的 Request 中传递的 where 条件返回多行表。

关注-:native-oracle-xml-db-web-services-11gr1

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

这是有效的。

webservice 的 URL -: http://domain:8080/orawsv/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 表的多行,而不用硬编码列名。

【问题讨论】:

  • 参考本帖:link

标签: oracle web-services plsql oracle-xml-db


【解决方案1】:

我已将程序修改为

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2022-01-23
    • 2018-04-08
    • 2020-09-23
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多