У меня есть хранимая процедура, которая принимает необязательные параметры из структуры Json. Если указаны значения json, параметры будут использоваться в качестве условий для курсоров. Если значение json не предусмотрено, я не хочу этого условия. Я решил это, используя Coalesce/Nvl в состоянии sql. Проблема в том, что процедура выполняется очень долго, используя Nvl/Coalesce. Можно ли использовать другой метод, который более эффективен? Возможно, динамический sql?Необязательный параметр, в котором условие - Как увеличить производительность - PL/SQL
Моя процедура:
Create or Replace Procedure findaccounts
(jsonIn IN clob,
jsonOut OUT varchar2)
As
obj json := json(jsonIn);
json_obj_out json;
json_lst json_list := json_list();
--Getstring is a function that sets variable to null if json value is not found
istatus varchar2(10) := GetString(obj json, 'status');
icreatedate := GetString(obj json, 'daysold');
iage int := GetString(obj json, 'age');
irownum int := GetString(obj json, 'rownum');
Begin
For rec in (Select A.accountnumber
From Accounts A
Inner Join Accountowner Ao On A.ownerId = Ao.Id
Where A.Status = iStatus
And A.daysold >= Coalesce(idaysold,A.daysold)
And Ao.Age = Coalesce(iAge,Ao.Age)
And rownum <= Coalesce(iRownum,5))
loop
obj := json();
obj.put('accountnumber',Rec.accountnumber);
json_lst.append(obj.to_json_value);
end loop;
json_lst.print;
jsonOut := json_lst.to_char();
End;
постановило:
Performance бустер динамического SQL. Возможность иметь динамические переменные связывания была разрешена с помощью пакета dbms_sql, поскольку немедленный запуск этой опции не имеет.
спасибо. Проблема разрешена через dbms_sql. Я не мог найти способ иметь необязательные переменные связывания через выполнение немедленно. – MrM