Я пытаюсь отправить содержимое таблицы xmltype на вставку с помощью httpRequest, для этого мне нужно преобразовать его в varchar, чтобы передать его в POST.Преобразование XMLTYPE в VARCHAR
Вот моя вставка:
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;
Но ценность экстракта вывода изображения ничего, и в этом случае запрос не вдавливать (вероятно, из-за возвращения длины ничего). И другие методы возвращают исключения.
Я попытался использовать XMLSerialize, как вы посоветовали, но я получил эту ошибку: «ORA-30991:» не может использовать DOM для добавления специального атрибута к родительскому элементу схемы »' –
Из этого запроса в триггере ? Я не знаю, как это сделать. К сожалению, я не могу проверить это на монете или воссоздать эту ошибку. Какую версию Oracle вы используете? Хм, вы вставляете XML в 'SYS_NC_ROWINFO $', поэтому откуда взялось 'objct_value'? –