1. create or replace procedure APP_BUSSINESS_CARD_LIST(p_in_str in varchar2,p_out_str out varchar2) is
  2. /*******************************************************************************
      out varchar2我本地oracle显示最长不能超过2000个字符
  3. -- 函数名称 APP_BUSSINESS_CARD_LIST
  4. -- 功能描述 商通卡列表
  5. -- 2019年8月7日10:40:09
  6. ********************************************************************************/
  7. -- Private exception declarations
  8. scanner_exception exception;
  9. pragma exception_init(scanner_exception, -20100);
  10.  
  11. parser_exception exception;
  12. pragma exception_init(parser_exception, -20101);
  13.  
  14. -- Private variable declarations
    -- 变量定义最长长度为4000(和oracle版本有关系,可以用str :=rpad("*",4000,"*");
    DBMS_OUTPUT.put_line('str: ' ||length(str));
    进行测试)
  15. type card_no_tab is table of varchar2(4000) index by BINARY_INTEGER;
  16. v_card_no_tab_info card_no_tab;
  17. v_single_info varchar2(4000);-- 存放整个分页list
  18. j_param json;
  19. iCount number;
  20. vv_count number;
  21. v_count number;
  22. v_user_id number;
  23. v_page number;
  24. v_page_size number;
  25. v_total_count number;
  26. v_total_page number;
  27. v_begin_rownum number;
  28. v_end_rownum number;
  29. jl_card json_list;-- 返回结果的list集合
  30. j_return json;
  31. v_ret varchar2(2);
  32. v_des varchar2(32);
  33.  
  34. begin
  35.  
  36. -- 创建json对象
  37. j_param := json(p_in_str);
  38. -- 获取用户ID
  39. v_user_id := json_ext.get_number(j_param, 'userId');
  40. -- 获取页码
  41. v_page := json_ext.get_number(j_param, 'page');
  42. if (v_page is null) then
  43. p_out_str := '{"resultCode":"31", "resultMsg":"page类型错误"}';
  44. return;
  45. end if;
  46. -- 校验页码数据是否有效(页码不能小于1)
  47. if (v_page < 1) then
  48. p_out_str := '{"resultCode":"36", "resultMsg":"page数据无效"}';
  49. return;
  50. end if;
  51. -- 获取页大小
  52. v_page_size := json_ext.get_number(j_param, 'pageSize');
  53. if (v_page_size is null) then
  54. p_out_str := '{"resultCode":"31", "resultMsg":"pageSize类型错误"}';
  55. return;
  56. end if;
  57. -- 校验页大小数据是否有效(页大小不能小于1并且不能大于7,可能会超出out长度)
  58. if (v_page_size < 1 or v_page_size > 7) then
  59. p_out_str := '{"resultCode":"38", "resultMsg":"pageSize数据无效"}';
  60. return;
  61. end if;
  62. -- 校验用户ID是否存在
  63. select count(1)
  64. into v_count
  65. from web_user_info
  66. where user_id = v_user_id;
  67. if (v_count <> 1) then
  68. p_out_str := '{"resultCode":"32", "resultMsg":"userId数据无效"}';
  69. return;
  70. end if;
  71. -- 获取卡列表总数量
  72. select count(1) into v_total_count from web_user_bussiness_card_view where userid = v_user_id;
  73. -- 计算总页数
  74. if (mod(v_total_count, v_page_size) = 0) then
  75. v_total_page := trunc(v_total_count / v_page_size);
  76. else
  77. v_total_page := trunc(v_total_count / v_page_size) + 1;
  78. end if;
  79. -- 如果总页数是0, 则直接返回结果; 否则查询交易记录并返回结果.
  80. if (v_total_page = 0) then
  81. -- 返回的josn数据
  82. j_return := json('{"resultCode":"00", "resultMsg":"成功"}');
  83. j_return.put('page', v_page);
  84. j_return.put('pageSize', v_page_size);
  85. j_return.put('totalPage', v_total_page);
  86. j_return.put('totalCount', v_total_count);
  87. j_return.put('cardList', jl_card);
  88.  
  89. -- 返回结果
  90. p_out_str := j_return.to_char(false);
  91. return;
  92. end if;
  93. -- 如果当前页数大于总页数, 那么当前页数赋值为总页数.
  94. if (v_page > v_total_page) then
  95. v_page := v_total_page;
  96. end if;
  97.  
  98. -- 计算开始行数和结束行数
  99. v_begin_rownum := (v_page - 1) * v_page_size;
  100. v_end_rownum := v_begin_rownum + v_page_size;
  101. iCount := 0;
  102. vv_count := 0;
  103. for r in (select * from web_user_bussiness_card_view where userid = v_user_id order by ismain desc,
  104. bindId asc) loop
  105. -- 修改条数限制位置
  106. iCount := iCount + 1;
  107. if iCount <= v_begin_rownum then
  108. --当不是我们需要的那页的数据,则取下一条数据
  109. continue ;
  110. elsif iCount > v_end_rownum then
  111. exit;
  112. else
  113. null;
  114. end if;
  115. vv_count := vv_count + 1;
  116. v_card_no_tab_info(vv_count) := '{"cardNo":"' || r.cardNo ||
  117. '","background":"' ||r.background ||
  118. '","publicType":' || r.publicType ||
  119. ',"cardAreaType":"' || r.cardAreaType ||
  120. '","isInMainCard":' || r.isInMainCard ||
  121. ',"isSetMainCard":"' || r.isSetMainCard ||
  122. '","isTrade":"' || r.isTrade ||
  123. '","isSend":"' || r.isSend ||
  124. '","facePrice":"' || r.facePrice ||
  125. '","isActive":"' || r.isActive ||
  126. '","isMain":"' || r.isMain ||
  127. '"}';
  128. end loop;
  129. --组合jl_card
  130. -- "cardList":"
  131. v_single_info := '"cardList":[';
  132.  
  133. for k in 1 .. vv_count loop
  134. if k < vv_count then
  135. v_single_info := v_single_info || v_card_no_tab_info(k) || ',';
  136. else
  137. v_single_info := v_single_info || v_card_no_tab_info(k);
  138. end if;
  139. end loop;
  140. v_single_info := v_single_info || ']';
  141. v_ret :='00';
  142. v_des :='成功';
  143. DBMS_OUTPUT.put_line('v_single_info : ' || LENGTH(v_single_info));
  144. p_out_str := '{"resultCode":"' || v_ret ||
  145. '", "resultMsg":"' || v_des ||
  146. '","page":"' || v_page ||
  147. '","pageSize":"' || v_page_size ||
  148. '","totalPage":"' ||v_total_page ||
  149. '","totalCount":"' ||v_total_count ||
  150. '",' || v_single_info || '}';
  151.  
  152. return;
  153. exception
  154. when scanner_exception then
  155. p_out_str := '{"resultCode":"94", "resultMsg":"Json扫描器异常"}';
  156. when parser_exception then
  157. p_out_str := '{"resultCode":"95", "resultMsg":"Json解析器异常"}';
  158. when others then
  159. DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);
  160. DBMS_OUTPUT.put_line('sqlerrm : ' ||sqlerrm);
  161. p_out_str := '{"resultCode":"96", "resultMsg":"运行时异常"}';
  162. end APP_BUSSINESS_CARD_LIST;

另外一种分页方法:

  1. -- SQL语句
  2. v_sqltext := 'select tradeMonth as "tradeMonth",
  3. debitAmount as "debitAmount",
  4. loanAmount as "loanAmount"
  5. from (select d.*, rownum as rn
  6. from (select to_char(tradedate, ''yyyy.mm'') as tradeMonth,
  7. sum(debitamount) as debitAmount,
  8. sum(loanamount) as loanAmount
  9. from xsh_trade_view
  10. where cardno = ''' || v_card_no || '''
  11. group by to_char(tradedate, ''yyyy.mm'')
  12. order by to_char(tradedate, ''yyyy.mm'') desc) d
  13. where rownum <= ' || v_end_rownum || ')
  14. where rn > ' || v_begin_rownum;
  15. end if;
  16.  
  17. -- 执行SQL语句并返回josn_list数据
  18. jl_trade := json_dyn.executeList(v_sqltext);

  

oracle存储过程中进行分页的更多相关文章

  1. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  2. Oracle存储过程中异步调用的实际操作步骤

    本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

  3. ORACLE存储过程中%TYPE和%ROWTYPE的区别

    ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为 t_emp emp%rowtype ;这个语句的意思是 定义一个 ...

  4. Oracle存储过程中跳出循环的写法

    注:本文来源于: <  Oracle存储过程中跳出循环的写法   > Oracle存储过程中跳出循环的写法 记录exit和return的用法 1:exit用来跳出循环 loop IF V_ ...

  5. java 实现往oracle存储过程中传递array数组类型的参数

    注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  >最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码 ...

  6. oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题

    oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题 学习了:http://blog.csdn.net/royzhang7/article/deta ...

  7. oracle存储过程中%type的含义

    转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  8. 在ORACLE存储过程中创建临时表

    在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...

  9. ORACLE 存储过程中保存用户自定义异常信息的一种方式

    1.创建错误日志表: create table REP_LOGS ( log_s_no NUMBER not null, log_date DATE default sysdate not null, ...

随机推荐

  1. scala的泛型浅析

    1. scala泛型浅析 package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界 ...

  2. docker 无法使用vi

    更新来源 apt-get update   安装vim apt-get install -y vim

  3. JDK,JRE,JVM 关系和概念

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  4. Flutter 34: 图解自定义 View 之 Canvas (一)

    小菜最近在学习自定义 View,刚了解了一下 Paint 画笔的神奇之处,现在学习一下 Canvas 画布的神秘之处.Flutter 提供了众多的绘制方法,小菜接触不深,尽量都尝试一下. Canvas ...

  5. 2.第一个MyBatis程序

    1.导入jar包 2.定义实体类 3.创建对应的表 4.定义Dao接口 public interface StudentDAO { public void saveStudent(Student s) ...

  6. 这段时间大量网站被k的原因分析

    百度这次更新的K站幅度比较大,通过对被k网站的分析,没有发现文章类型网站有降权现象,主要集中在企业网站上.分析大约30发个网站发现共同明显的特征就是这样的网站有大量的页面只有一张或者两张图片,而这些网 ...

  7. Java Object对象中的wait,notify,notifyAll的理解

    wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态,在线程协作时,大家都会用到notify()或者notifyAll()方法,其中wait与notify是j ...

  8. 实时跟踪之TRACA

    背景: 目前,在实时跟踪领域存在着越来越多的先进方法,同时也极大地促进了该领域的发展.主要有两种不同的基于深度学习的跟踪方法:1.由在线跟踪器组成,这些跟踪器依赖网络连续的微调来学习目标的变化外观,精 ...

  9. win10下 switchhost权限修改问题

    switchhost提示没有切换权限:C:\WINDOWS\system32\drivers\etc\host 文件无法修改   1.找到host文件 C:\Windows\System32\driv ...

  10. 认识Caffe与Caffe2

    认识Caffe与Caffe2 目录: 一.Caffe的作者-贾扬清 二.Caffe简介--Caffe.Caffe2.Caffe2Go 三.认识Caffe 四.认识Caffe2 五.认识Caffe2Go ...