【发布时间】:2022-12-18 19:32:31
【问题描述】:
我想从 PL/SQL 过程连接到 SOAP Web 服务。但我不知道该怎么做。我是 PL/SQL 的新手,这是为了学习目的。任何人都可以用一个简单的示例脚本来解释这个过程吗? 我正在使用 Oracle SQL 开发人员 12。
我只想要一个简单的脚本,它将一个值作为请求传递并返回一个值作为响应。
【问题讨论】:
我想从 PL/SQL 过程连接到 SOAP Web 服务。但我不知道该怎么做。我是 PL/SQL 的新手,这是为了学习目的。任何人都可以用一个简单的示例脚本来解释这个过程吗? 我正在使用 Oracle SQL 开发人员 12。
我只想要一个简单的脚本,它将一个值作为请求传递并返回一个值作为响应。
【问题讨论】:
您可以使用函数发出请求并使用UTL_HTTP package 获取响应。
FUNCTION putRequest_getResponse(mEnvelope VarChar2, mURL VarChar2)
RETURN VARCHAR2 AS
BEGIN
Declare
mRet VarChar2(32767) := '';
mRetCLOB CLOB := Null;
mResponseEnvelope VarChar2(32767);
mTimeout NUMBER(4) := 90;
mReq UTL_HTTP.req;
mResp UTL_HTTP.resp;
Begin
UTL_HTTP.SET_TRANSFER_TIMEOUT(mTimeout);
--
mReq := UTL_HTTP.BEGIN_REQUEST( mURL, 'POST', 'HTTP/1.1');
UTL_HTTP.SET_HEADER(mReq, 'Content-Type', 'text/xml');
UTL_HTTP.SET_HEADER(mReq, 'Content-Length', length(mEnvelope));
UTL_HTTP.SET_HEADER(mReq, 'SOAPAction', mURL);
UTL_HTTP.WRITE_TEXT(mReq, mEnvelope);
--
mResp := UTL_HTTP.GET_RESPONSE(mReq);
UTL_HTTP.READ_TEXT(mResp, mResponseEnvelope);
UTL_HTTP.END_RESPONSE(mResp);
--
mRet := mResponseEnvelope;
--
RETURN mRet;
Exception
WHEN OTHERS THEN
mRet := 'ERR - putRequest_getResponse' || Chr(10) || SQLERRM;
Return(mRet);
End;
END putRequest_getResponse;
根据您与之通信的 Web 服务,可能会有一些小差异,但这是我使用的功能。
问候...
【讨论】: