--JsonArray 转 Table,返回临时表名 procedure JsonArrarToTable(v_json clob,v_tabname out varchar2,v_res_code out number,v_res_msg out varchar2) is v_jsonArray json_list; v_jsonObj json; v_fiels json_list; v_values json_list; v_value json_value; v_cnt1 pls_integer; v_cnt2 pls_integer; v_name varchar2(100); v_sql varchar2(4000):=''; begin v_jsonArray:=json_list(v_json); v_tabname:='tmp_table1'; v_sql:='create table '||v_tabname||'('; if v_jsonArray.count=0 then v_res_code:=-1; v_res_msg:='必传参数为空或参数不符合规定!'; return; end if; --循环取出每个JsonObject for v_cnt1 in 1..v_jsonArray.count loop v_jsonObj := json(v_jsonArray.get(v_cnt1)); --生成表结构 if v_cnt1=1 then if v_jsonObj.count=0 then v_res_code:=-1; v_res_msg:='必传参数为空或参数不符合规定!'; return; end if; v_fiels:=v_jsonObj.get_keys(); for v_cnt2 in 1..v_fiels.count loop v_sql:=v_sql||v_fiels.get(v_cnt2).get_string||' varchar2(500),'; end loop; v_sql:=substr(v_sql,1,length(v_sql)-1)||')'; execute immediate v_sql; end if; --插入数据 v_sql:='insert into '||v_tabname||' values('; for v_cnt2 in 1..v_jsonObj.count loop v_value:=v_jsonObj.get(v_cnt2); if v_value.is_string then v_sql:=v_sql||''''||v_value.get_string||''','; else v_sql:=v_sql||v_value.get_number||','; end if; end loop; v_sql:=substr(v_sql,1,length(v_sql)-1)||')'; --dbms_output.put_line(v_sql); execute immediate v_sql; end loop; v_res_code:=1; v_res_msg:=''; exception when others then rollback; v_res_code:=0; v_res_msg:=sqlerrm; end JsonArrarToTable;
浙公网安备 33010602011771号