Oracle EBS json
JSON:? JavaScript 对象表示法 JavaScript Object Notation JSON 是存储和交换文本信息的语法。类似XML。 JSON 比 XML更小、更快,更易解析。 使用中,JSON有以下3种结构: 1. 对象:{"name":"Jenrry","age":19} 2.数组: 比如? [{"name":"Jenrry","age":19},{"name":"Jerry","age":25}] 3. 值:{“name”:"Jenrry","birthday":{"month":8,"day":2}},类似于对象嵌套对象 大括号{} 用来描述一组“不同类型的无序键值对集合”,每个键值对可以理解为OPP的属性描述,方括号[] 用来描述一组“相同类型的有序数据组合”。 摘自:?https://www.cnblogs.com/xiaochongchong/p/5284441.html 如上,JSON是一种数据形式。 Oracle EBS中在REST接口中使用JSON数据,其实也是将XML格式转化而已。REST接口还是基于HTTP转发,使用HTTP协议里的POST方法,因此调用底层的 uttl_http函数。 l_exp_json json; l_exp_clob CLOB; l_exp_json := json(); l_exp_json.put(‘COMPANY_CODE‘,p_company_code); l_exp_json.put(‘REQUEST_STATUS‘,1); l_exp_json.put(‘ERROR_MESSAGE‘,p_exception_msg); l_exp_clob := empty_clob(); dbms_lob.createtemporary(l_exp_clob,TRUE); l_exp_json.to_clob(l_exp_clob,TRUE); RETURN l_exp_clob;
l_all_json json; l_single_json json; l_json_list json_list; l_batch_id NUMBER; l_all_json := json(); l_all_json.put(‘COMPANY_CODE‘,g_company_code); l_all_json.put(‘REQUEST_STATUS‘,0); l_all_json.put(‘ERROR_MESSAGE‘,‘‘); l_json_list := json_list(); FOR rec_records IN cur_payment_data LOOP l_single_json := json(); l_single_json.put(‘EXPENSE_NUMBER‘,rec_records.expense_number); l_single_json.put(‘EXPENSE_NUMBER2‘,rec_records.expense_number2); l_json_list.add_elem(l_single_json.to_json_value); END LOOP; l_all_json.put(‘RECORDS‘,l_json_list); l_return_clob := empty_clob(); dbms_lob.createtemporary(l_return_clob,TRUE); l_all_json.to_clob(l_return_clob,TRUE); x_rtn_clob := l_return_clob; dbms_lob.freetemporary(l_return_clob); ? FUNCTION invoke_webservice(p_wsdl IN VARCHAR2,p_soap_request IN VARCHAR2) RETURN xmltype IS http_req utl_http.req; http_resp utl_http.resp; soap_respond VARCHAR2(30000); resp xmltype; BEGIN http_req := utl_http.begin_request(p_wsdl,‘POST‘,‘HTTP/1.1‘); utl_http.set_header(http_req,‘Content-Type‘,‘text/xml;charset=utf-8‘); -- charset=utf-8 如多参数有中文必须加 utl_http.set_header(http_req,‘Content-Length‘,lengthb(p_soap_request)); --lengthb 不能用 length 如果用length 则碰见中文会报错 utl_http.set_header(http_req,‘SOAPAction‘,‘‘); utl_http.write_text(http_req,p_soap_request); http_resp := utl_http.get_response(http_req); utl_http.read_text(http_resp,soap_respond); utl_http.end_response(http_resp); resp := xmltype.createxml(soap_respond); RETURN resp; END;
l_request utl_http.req; l_response utl_http.resp; l_resp_xml xmltype; resp_json json; l_resp_json json_list; json_v json_value; l_req_data := ‘page=‘ || p_page || ‘&size=10&startDate=‘ || to_char(nvl(p_start_date,SYSDATE - 1),‘YYYY-MM-DD‘) || ‘&endDate=‘ || to_char(nvl(p_end_date,SYSDATE + 1),‘YYYY-MM-DD‘); l_url := l_url || l_req_data; l_request := utl_http.begin_request(l_url,utl_http.http_version_1_1); utl_http.set_header(l_request,‘text/html; charset=utf-8‘); utl_http.set_header(l_request,to_char(lengthb(l_url))); utl_http.write_text(l_request,l_url); l_response := utl_http.get_response(l_request); utl_http.read_text(l_response,l_resp_data); utl_http.end_response(l_response); --插入数据 resp_json := json(l_resp_data); l_message := get_string(json_ext.pp(obj => resp_json,v_path => ‘message‘)); l_status := get_string(json_ext.pp(obj => resp_json,v_path => ‘status‘)); l_error_code := get_string(json_ext.pp(obj => resp_json,v_path => ‘errorCode‘)); l_total_count := nvl(json_ext.pp(obj => resp_json,v_path => ‘totleCount‘),0); --获取需要循环次数 g_page := ceil(l_total_count / 10); l_resp_json := json_list(json_ext.pp(obj => resp_json,v_path => ‘data‘)); --个数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |