我正在处理的某些过程将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
答案 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希望能有所帮助。