Oracle 12, устарел utl_dbws - PullRequest
       2

Oracle 12, устарел utl_dbws

0 голосов
/ 22 октября 2018

В пакете oracle 12c utl_dbws (utl_dbws.invoke () - вызов службы) устарел (старый, избегайте его любой ценой :)).

Что я должен использовать в oracle / plsql 12c?Я пытался спросить у Google что-то вроде «utl_dbws эквивалент 12c» и т. Д., Но ничего конкретного.

Есть предложения?

1 Ответ

0 голосов
/ 22 октября 2018

Используйте пакет UTL_HTTP , вот пример.Если вы пользуетесь Google для вызова веб-службы с помощью UTL_HTTP, вы должны найти несколько учебных пособий.

FUNCTION GenerateRequest RETURN XMLTYPE IS
    res XMLTYPE;
BEGIN

    SELECT  
        XMLELEMENT("soapenv:Envelope", 
            XMLATTRIBUTES(
                'http://schemas.xmlsoap.org/soap/envelope/' AS "xmlns:soapenv", 
                'http://service.xxxxx.xxxxxx.com/' AS "xmlns:ser"),
            XMLELEMENT("soapenv:Header"),
            XMLELEMENT("soapenv:Body", 
                XMLELEMENT("ser:getAffectedServices",
                    XMLELEMENT("arg0",
                        XMLELEMENT("appName", 'com'),
                        XMLELEMENT("asmTicket", 'dummy'),
                        XMLELEMENT("instanceName", 'PAMOSS'),
                        XMLELEMENT("principal", 'dummy')
                    ),
                    XMLELEMENT("arg1", 1),
                    XMLELEMENT("arg2", 'some value'),                   
                    XMLELEMENT("arg3", 'basic')
                )
            )
        )
    INTO res
    FROM dual;

    RETURN res;

END GenerateRequest;


PROCEDURE getAffectedServices IS

   l_http_request    UTL_HTTP.REQ;
   l_http_response   UTL_HTTP.RESP;
   BUFFER VARCHAR2(32767);
   l_response_clob   CLOB;
    p_soap_msg CLOB;
    msg_length INTEGER;
    p_url VARCHAR2(4000) := 'http://service.xxxx.xxxx.com';

    amount INTEGER := 10000;
    OFFSET INTEGER := 1;

BEGIN

    p_soap_msg := GenerateRequest.GetClobVal();
    msg_length := DBMS_LOB.GETLENGTH(p_soap_msg);

    -- Prepare the header
    UTL_HTTP.SET_TRANSFER_TIMEOUT(300);
   l_http_request := UTL_HTTP.BEGIN_REQUEST(p_url, 'POST', UTL_HTTP.HTTP_VERSION_1_1);
   UTL_HTTP.SET_HEADER(l_http_request, 'Content-Type', 'text/xml; charset="utf-8"');
   UTL_HTTP.SET_HEADER(l_http_request, 'Content-Length', msg_length);

   -- Send message body
    LOOP
        EXIT WHEN OFFSET > msg_length;
        DBMS_LOB.READ(p_soap_msg, amount, OFFSET, BUFFER);
        UTL_HTTP.WRITE_TEXT(l_http_request, BUFFER);
        OFFSET := OFFSET + amount;
    END LOOP;
   -- Retrieve the response from web service
   l_http_response := UTL_HTTP.GET_RESPONSE(l_http_request);

   DBMS_LOB.CREATETEMPORARY(l_response_clob, TRUE, DBMS_LOB.CALL);
   DBMS_LOB.OPEN(l_response_clob, DBMS_LOB.LOB_READWRITE);

    -- Read the response message     
    BEGIN
    LOOP
        UTL_HTTP.READ_TEXT(l_http_response, BUFFER, 8192);
        DBMS_LOB.WRITEAPPEND(l_response_clob, LENGTH(BUFFER), BUFFER);
    END LOOP;
    EXCEPTION
        WHEN UTL_HTTP.END_OF_BODY THEN
            UTL_HTTP.END_RESPONSE(l_http_response);
    END;
   DBMS_LOB.CLOSE(l_response_clob);

   -- > Do whatever you like to do with XMLTYPE(l_response_clob);

   DBMS_LOB.FREETEMPORARY(l_response_clob);

END getAffectedServices;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...