Используйте пакет 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;