我可以使用JSON字符串来条件查询结果吗?

时间:2019-03-28 19:42:48

标签: oracle plsql

我正在处理的某些过程将JSON字符串作为varchar2作为输入参数,其中包含从Web服务器作为键值对发送的,旨在过滤查询结果的参数。根据使用情况,某些参数可能不会出现在传入的JSON中。我想知道是否可以使用JSON字符串中的参数值作为查询条件,即使某些参数可能不返回值?像这样:

v_json VARCHAR2 := '{"paramA":"valueA","paramB":"valueB"}';
//the JSON can include values for either paramA, paramB, and paramC
SELECT * 
FROM table
WHERE colA = paramA 
  AND colB > paramB
  AND colC LIKE paramC;

由于JSON没有paramC,因此我需要运行如下查询:

SELECT *
FROM table
WHERE colA = paramA
  AND colB > paramB
//condition C shouldn't be considered, since a null value would have
//produce the wrong results

1 个答案:

答案 0 :(得分:0)

在Oracle版本12c或更高版本中,您可以使用$.ajax({ type: 'POST', url: 'mysite/action', dataType: 'json', data: postData, success: function(response) { console.log(response); var input = $('<a class="btn btn-info" href="' + response + '" role="button">Link</a>'); input.appendTo($("body")); } }); 有条件的并且使用JSON_EXISTS来获取值。以下是根据您更新的要求的示例代码。

JSON_VALUE

对于早于12 / 18c的Oracle版本,您可以下载,安装并使用开源declare v_json VARCHAR2(4000) := '{"paramA":"valueA","paramB":"valueB"}'; l_cntA number; l_cntB number; l_cntC number; l_cnt number; v_sql varchar2(4000); begin select count(1) into l_cntA from dual where JSON_EXISTS(v_json,'$.paramA'); select count(1) into l_cntB from dual where JSON_EXISTS(v_json,'$.paramB'); select count(1) into l_cntC from dual where JSON_EXISTS(v_json,'$.paramC'); v_sql := ' SELECT count(1) FROM table WHERE '|| case when l_cntA > 0 then 'colA=JSON_VALUE('''||v_json||''',''$.paramA'')' end || case when (l_cntA > 0 and l_cntB > 0 ) then ' AND ' end || case when l_cntB > 0 then 'colB = JSON_VALUE('''||v_json||''',''$.paramB'')' end || case when ((l_cntA > 0 or l_cntB > 0 ) and l_cntC > 0 ) then ' AND ' end || case when l_cntC > 0 then 'colC LIKE ''%''||JSON_VALUE('''||v_json||''',''$.paramC'')||''%''' end; DBMS_OUTPUT.PUT_LINE('v_sql' || v_sql); execute immediate v_sql into l_cnt; DBMS_OUTPUT.PUT_LINE('v_name ' || l_cnt); exception when others then DBMS_OUTPUT.PUT_LINE('No Data Found'); end; 软件包来实现此目的。Click here to Download PL/JSON希望能有所帮助。