關於plsql模糊查詢分頁等功能
根據多個欄位進行查詢
cursor v_get_portals is
select * from
(select v.* ,rownum cnt from
( select count(1) over (partition by 1) total,
p.portal_code,
p.portal_name,
p.creation_date,
p.last_updated_date,
p.portal_manager,
p.created_by,
p.portal_is_public,
p.portal_enable
from p_portals p
where p.deleted = 0
-- 如果前面沒有nvl p.portal_code 若為空則查詢不到值
and nvl( p.portal_code,' ') like '%'||nvl(v_portal_code,p.portal_code)||'%'
and p.portal_name
and p.portal_is_public like '%'||nvl(v_portal_source_type,p.portal_is_public) || '%'
order by decode (v_sort_col,
'portal_name_desc',p.portal_name,
'portal_create_time_desc',p.creation_date
'portal_update_time_desc',p.last_updated_date,
'portal_source_type_desc',p.portal_is_public,
'portal_enable_desc',p.portal_enable
) desc,
decode (v_sort_col,
'portal_name_asc',p.portal_name,
'portal_create_time_asc',p.creation_date,
'portal_update_time_asc',p.last_updated_date,
'portal_source_type_asc',p.portal_is_public,
'portal_enable_asc',p.portal_enable
) asc
) v
where rownum <=v_page * v_size)
where cnt >(v_page-1) * v_size ;
--模糊欄位的取值
v_portal_code := p_common_util_pkg.get_filter_value('portalCode',v_request);
v_portal_name :=p_common_util_pkg.get_filter_value('portalName',v_request);
v_portal_source_type :=p_common_util_pkg.get_filter_value('portalSourceType',v_request);
/* =============================================
* function
* description:介面欄位模糊搜尋
* name : get_filter_value
* author:2017-09-21 Guihu.Chai create
* history:
* =============================================*/
FUNCTION get_filter_value(p_field VARCHAR2,
p_request json) RETURN VARCHAR2 IS
v_fields json_list;
v_field json;
v_result VARCHAR2(4000);
BEGIN
IF p_request.get('fields') IS NULL THEN
RETURN NULL;
END IF;
v_fields := json_list(p_request.get('fields'));
FOR v_index IN 1 .. v_fields.count
LOOP
v_field := json(v_fields.get(v_index));
IF p_field = v_field.get_string('field') THEN
v_result := v_field.get_string('value');
END IF;
END LOOP;
RETURN v_result;
END;
END p_common_util_pkg;