1. 程式人生 > >關於plsql模糊查詢分頁等功能

關於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 

like '%'||nvl(v_portal_name,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;