当前位置:Gxlcms > 数据库问题 > PLSQL 学习之路(2)分页查询

PLSQL 学习之路(2)分页查询

时间:2021-07-01 10:21:17 帮助过:55人阅读

PROCEDURE proc_query_organization_emps(p_request  CLOB,

                                         x_response OUT CLOB) IS

    v_api             VARCHAR2(100) := ‘proc_query_organization_emps‘;

    v_request         json;

    v_response        pl_json := pl_json;

    v_organization_id NUMBER;

    v_page            NUMBER;

    v_size            NUMBER;

    v_line            pl_json := pl_json;

    v_start_rownum    NUMBER;

    v_end_rownum      NUMBER;

    v_userlist        pl_json := pl_json;

    v_total           NUMBER;

 

    CURSOR v_orge_cur IS

      SELECT *

        FROM (SELECT dfoe.org_employee_id,

                     dfe.employee_code,

                     dfe.employee_name,

                     dfe.phone,

                     dfe.email,

                     rownum AS rowno

                FROM dfnd.dfnd_employees dfe, dfnd.dfnd_org_employees dfoe

               WHERE dfe.employee_code = dfoe.employee_code

                 AND dfoe.organization_id = v_organization_id

               ORDER BY dfoe.org_employee_id)

       WHERE rowno BETWEEN v_start_rownum AND v_end_rownum;

  BEGIN

    v_request         := json(p_request);

    v_organization_id := v_request.get(‘organizationId‘).get_number;

    v_page            := nvl(v_request.get(‘page‘).get_number, 1);

    v_size            := nvl(v_request.get(‘size‘).get_number, 25);

    IF v_page = 1 THEN

      v_start_rownum := v_page;

    ELSE

      v_start_rownum := (v_page - 1) * v_size;

    END IF;

    v_end_rownum := v_start_rownum + v_size;

 

    FOR v_orge IN v_orge_cur LOOP

      v_line := pl_json;

      v_line.set_value(‘userId‘, v_orge.org_employee_id);

      v_line.set_value(‘userCode‘, v_orge.employee_code);

      v_line.set_value(‘userName‘, v_orge.employee_name);

      v_line.set_value(‘userPhone‘, v_orge.phone);

      v_line.set_value(‘userEmail‘, v_orge.email);

      v_userlist.add_list_item(‘userList‘, v_line);

    END LOOP;

    SELECT COUNT(*) INTO v_total FROM dfnd.dfnd_org_employees;

    v_response := v_userlist;

    v_response.set_value(‘totalEmp‘, v_total);

    x_response := v_response.to_json;

  EXCEPTION

    WHEN OTHERS THEN

      ROLLBACK;

      v_response.fail(‘接口‘ || v_api || ‘发生错误,错误原因:‘ || SQLERRM);

      x_response := v_response.to_json;

  END proc_query_organization_emps;

PLSQL 学习之路(2)分页查询

标签:from   rom   back   employees   ati   sql   ota   else   and   

人气教程排行