Ошибка в строке 1, столбец 1: неожиданный символ «<» в Apex oracle - PullRequest
0 голосов
/ 27 марта 2020

когда я отправляю файл в другую базу данных, я получаю ответ, анализирую его с помощью команды apex_json.parse (v_clob_post); и записываю нужное мне изменение. Но есть ошибка, которую я не могу устранить:

ORA-20987: ошибка в строке 1, столбец 1: неожиданный символ "<" </p>

Как я могу решить эту проблему ?

Мой код:

set serveroutput on
Declare     
v_clob_post     CLOB;
v_clob          CLOB;
l_body_b        BLOB;
g_EXTERNAL_ID  varchar2(300);   
v_count int;
BEGIN 

  for r in (select id from SEC_OBJECT)

  loop  

    select MYFILE INTO l_body_b from SEC_OBJECT  where id = r.id;
    apex_json.initialize_clob_output;
    apex_json.open_object;
    apex_json.write('snapshot', blob_to_clob_base64(l_body_b)); 
    apex_json.close_object;
    V_clob  := apex_json.get_clob_output;
    apex_json.free_output;
   if   l_body_b is not null then
                    apex_web_service.g_request_headers(1).name := 'Content-Type';  
                    apex_web_service.g_request_headers(1).value := 'application/json';  
                    v_clob_post  := apex_web_service.make_rest_request(p_url => 'myURL',p_http_method => 'POST'
                    ,p_body =>  v_clob );
   if apex_web_service.g_status_code != 200 then
      dbms_output.put_line('id ' || r.id || ' status ' || apex_web_service.g_status_code);
      dbms_output.put_line(v_clob_post);
    else
      apex_json.parse(v_clob_post);     
    end;


 apex_json.parse(v_clob_post);     
 g_EXTERNAL_ID := apex_json.get_varchar2(p_path => 'id_document'); 
 update SEC_OBJECT set EXTERNAL_ID = g_EXTERNAL_ID where id = r.id;
    end if;
end loop;
end;
/

Мой ответ (JSON Я занимаюсь разбором):

successful: true
id_document: "112118e18"

1 Ответ

0 голосов
/ 27 марта 2020

Похоже, что один из вызовов REST, который вы делаете, приводит к ошибке на стороне сервера, а полученный ответ содержит страницу ошибки HTML вместо данных JSON.

Чтобы помочь вам определите, что вы получаете и какой вызов вызывает проблему, добавьте отладку в ваш код, например:

set serveroutput on

Declare     
...
BEGIN 

for r in (select id from SEC_OBJECT where id >1500)
  loop  
...
    v_clob_post  := apex_web_service.make_rest_request(p_url => 'http://myURL',p_http_method => 'POST'
      ,p_body =>  v_clob );

    dbms_output.put_line('id ' || r.id || ' status ' || apex_web_service.g_status_code);
    dbms_output.put_line(v_clob_post);

    apex_json.parse(v_clob_post);     
...
  end loop;
end;
/

В зависимости от вашего клиента вам может потребоваться сделать что-то еще, чтобы увидеть результат; set serveroutput on будет работать в SQL* Plus, SQLcl и SQL Developer (если запускаться как скрипт), последний также имеет меню «View-> Dbms Output», чтобы открыть другое окно, другие будут иметь свои собственные эквиваленты .

Вы можете уменьшить выход и сузить проблему, выполнив:

    v_clob_post  := ...

    if apex_web_service.g_status_code != 200 then
      dbms_output.put_line('id ' || r.id || ' status ' || apex_web_service.g_status_code);
      dbms_output.put_line(v_clob_post);
    else
      apex_json.parse(v_clob_post);     
    end;

Надеемся, что статус и ответ скажут вам, почему это не понравилось, особенно v_clob запрос.

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