【发布时间】:2016-12-17 19:37:59
【问题描述】:
我正在尝试使用 httpRequest 在插入时发送 xmltype 表内容,为此我必须将其转换为 varchar 以在 POST 中传递。
这是我的插入:
Insert into CC.MOVIE (SYS_NC_ROWINFO$) values ('<movie>
<id>217530</id>
<title>Midnight Limited</title>
<originalTitle>Midnight Limited</originalTitle>
<release_date>1940-03-20</release_date>
<status>3</status>
<vote_average>0</vote_average>
<vote_count>0</vote_count>
<runtime>0</runtime>
<certification/>
<budget>61</budget>
<tagline>DEATH RIDES THE RAILS! </tagline>
<genres>
<genre>
<idGenre>12</idGenre>
</genre>
<genre>
<idGenre>28</idGenre>
</genre>
<genre>
<idGenre>80</idGenre>
</genre>
</genres>
<actors>
<actor>
<idActor>32218</idActor>
<characterName>Prof. Van Dillon</characterName>
</actor>
<actor>
<idActor>87545</idActor>
<characterName>Joan Marshall</characterName>
</actor>
<actor>
<idActor>90336</idActor>
<characterName>Val Lennon</characterName>
</actor>
<actor>
<idActor>120708</idActor>
<characterName>Capt. Harrigan</characterName>
</actor>
</actors>
<directors>
<director>
<idDirector>120796</idDirector>
</director>
</directors>
</movie>
');
还有我的触发器:
create or replace TRIGGER movie_insert
AFTER INSERT ON MOVIE
FOR EACH ROW
DECLARE
doc XMLType;
req utl_http.req;
res utl_http.resp;
url varchar2(4000) := 'http://10.0.2.2:8088/VerifActeur/VerifActeur';
--name varchar2(4000);
buffer varchar2(5000);
BEGIN
SELECT
EXTRACTVALUE(:new.object_value, '/movie/text()')
INTO buffer
FROM DUAL;
--Select CAST(:new.object_value AS VARCHAR2(5000)) into buffer from dual;
-- buffer := :new.object_value.getStringVal();
--doc := :new.sys_nc_rowinfo$;
--buffer:= :new.object_value.extract('/movie/text()').getStringVal();
dbms_output.put_line(buffer);
req := utl_http.begin_request(url, 'POST');
--utl_http.set_header(req, 'user-agent', 'mozilla/4.0');
utl_http.set_header(req, 'content-type', 'text/xml');
utl_http.set_header(req, 'Content-Length', length(buffer));
utl_http.write_text(req, buffer);
res := utl_http.get_response(req);
-- process the response from the HTTP call
begin
loop
utl_http.read_line(res, buffer);
dbms_output.put_line(buffer);
end loop;
utl_http.end_response(res);
exception
when utl_http.end_of_body
then
utl_http.end_response(res);
end;
utl_http.end_request(req);
END;
但是提取值输出什么也不显示,在这种情况下请求不是凹痕(可能是因为长度什么都不返回)。并且其他方法正在返回异常。
【问题讨论】: