先查询再插入,改为存储过程

  1. create or replace procedure PRO_REVENUE_SI(l_p_cd in Varchar2,
  2. l_c_cd in Varchar2,
  3. l_prod_type in Varchar2,
  4. l_identity_type in Varchar2,
  5. l_industry_type_id in Varchar2,
  6.  
  7. l_p_id in Varchar2,
  8. l_c_id in Varchar2,
  9. l_region_name in Varchar2,
  10. l_industry_code in Varchar2,
  11. l_industry_name in Varchar2,
  12. l_par_industry_id in Varchar2,
  13. l_industry_grade in Varchar2,
  14. return_val out Varchar2
  15. )
  16.  
  17. IS
  18. /*
  19. DECLARE
  20. l_p_cd Varchar2(1000) := 8350000;
  21. l_c_cd Varchar2(1000) := 8350102;
  22. l_prod_type Varchar2(1000) := 10;
  23. l_identity_type Varchar2(1000) := 2;
  24. l_industry_type_id Varchar2(1000) := 2;
  25.  
  26. l_p_id Varchar2(1000) := 1;
  27. l_c_id Varchar2(1000) := 1;
  28. l_region_name Varchar2(1000) := 1;
  29. l_industry_code Varchar2(1000) := 1;
  30. l_industry_name Varchar2(1000) := 1;
  31. l_par_industry_id Varchar2(1000) := 1;
  32. l_industry_grade Varchar2(1000) := 1;
  33. */
  34. --定义变量接收参数,以便对参数进行修改
  35. ll_identity_type varchar2(1000) := l_identity_type;
  36. ll_industry_type_id varchar2(1000) := l_industry_type_id;
  37.  
  38. --函数返回值
  39. --return_val varchar2(8000) := '开始';
  40. --通用游标
  41. cv SYS_REFCURSOR;
  42. --创建记录用于封装部分查询结果
  43. TYPE revenue_type IS RECORD(
  44. r1 REVENUE_STATISTICS_RES.Audit_Cust_Num%TYPE,
  45. r2 REVENUE_STATISTICS_RES.AUDIT_CUST_PARTY_NUM%TYPE,
  46.  
  47. t1 REVENUE_STATISTICS_RES.TY_1%TYPE,
  48. t2 REVENUE_STATISTICS_RES.TY_1%TYPE,
  49. t3 REVENUE_STATISTICS_RES.TY_1%TYPE,
  50. t4 REVENUE_STATISTICS_RES.TY_1%TYPE,
  51. t5 REVENUE_STATISTICS_RES.TY_1%TYPE,
  52. t6 REVENUE_STATISTICS_RES.TY_1%TYPE,
  53. t7 REVENUE_STATISTICS_RES.TY_1%TYPE,
  54. t8 REVENUE_STATISTICS_RES.TY_1%TYPE,
  55. t9 REVENUE_STATISTICS_RES.TY_1%TYPE,
  56. t10 REVENUE_STATISTICS_RES.TY_1%TYPE,
  57. t11 REVENUE_STATISTICS_RES.TY_1%TYPE,
  58. t12 REVENUE_STATISTICS_RES.TY_1%TYPE,
  59.  
  60. y1 REVENUE_STATISTICS_RES.TY_1%TYPE,
  61. y2 REVENUE_STATISTICS_RES.TY_1%TYPE,
  62. y3 REVENUE_STATISTICS_RES.TY_1%TYPE,
  63. y4 REVENUE_STATISTICS_RES.TY_1%TYPE,
  64. y5 REVENUE_STATISTICS_RES.TY_1%TYPE,
  65. y6 REVENUE_STATISTICS_RES.TY_1%TYPE,
  66. y7 REVENUE_STATISTICS_RES.TY_1%TYPE,
  67. y8 REVENUE_STATISTICS_RES.TY_1%TYPE,
  68. y9 REVENUE_STATISTICS_RES.TY_1%TYPE,
  69. y10 REVENUE_STATISTICS_RES.TY_1%TYPE,
  70. y11 REVENUE_STATISTICS_RES.TY_1%TYPE,
  71. y12 REVENUE_STATISTICS_RES.TY_1%TYPE);
  72. --声明变量为自定义记录类型
  73. revenue_rec revenue_type;
  74. --最终查询sql
  75. s_all varchar2(3000) := '';
  76.  
  77. --基本SQL(注意 UPPER(m.PARTY_ID) != ''NULL'' 中字符串NULL要用4个单引号,否则执行不报错但查询结果是错的)
  78. s1 varchar2(1000) := 'SELECT /*+PARALLEL(12)*/
  79. COUNT(e.CUST_ID) AUDIT_CUST_NUM, COUNT(DISTINCT(m.PARTY_ID)) AUDIT_CUST_PARTY_NUM,
  80. SUM(TY_1) TY1 ,SUM(TY_2) TY2,SUM(TY_3) TY3,SUM(TY_4) TY4,SUM(TY_5) TY5,SUM(TY_6) TY6,SUM(TY_7) TY7,SUM(TY_8) TY8,SUM(TY_9) TY9,SUM(TY_10) TY10,SUM(TY_11) TY11,SUM(TY_12) TY12,
  81. SUM(LY_1) LY1 ,SUM(LY_2) LY2,SUM(LY_3) LY3,SUM(LY_4) LY4,SUM(LY_5) LY5,SUM(LY_6) LY6,SUM(LY_7) LY7,SUM(LY_8) LY8,SUM(LY_9) LY9,SUM(LY_10) LY10,SUM(LY_11) LY11,SUM(LY_12) LY12
  82. FROM EDA_CUST_INC e, CUST_CP_MERGE m
  83. WHERE
  84. e.CUST_ID = m.CUST_ID
  85. AND e.STD_LATN_CD = m.STD_LATN_CD
  86. and m.PARTY_ID IS NOT NULL
  87. AND UPPER(m.PARTY_ID) != ''NULL''
  88. AND e.STD_PRVNCE_CD = ' || l_p_cd ||
  89. ' AND e.STD_LATN_CD = ' || l_c_cd;
  90.  
  91. --产品类型
  92. s_prod_type varchar2(1000) := ' AND e.PROD_TYPE =' || l_prod_type;
  93.  
  94. --身份证类型
  95. s_identity varchar2(1000) := ' AND EXISTS (SELECT 1
  96. FROM PARTY P
  97. WHERE m.PARTY_ID = p.PARTY_ID
  98. AND p.IDENTITY_TYPE = ' ||
  99. l_identity_type || ')';
  100.  
  101. --行业类型
  102. s_industry varchar2(1000) := ' and exists (select 1
  103. from party_org po
  104. where m.party_id = po.party_id
  105. and po.INDUSTRY_TYPE_ID = ' ||
  106. l_industry_type_id || ')';
  107.  
  108. BEGIN
  109. --处理产品类型参数
  110. /*
  111. IF l_prod_type is null
  112. THEN
  113. s_prod_type := ' AND e.PROD_TYPE is null';
  114. END IF;
  115. */
  116. --处理身份证类型参数
  117. IF l_identity_type = '-1' THEN
  118. s_identity := ' AND not EXISTS (SELECT 1
  119. FROM PARTY P
  120. WHERE m.PARTY_ID = p.PARTY_ID)';
  121. ELSIF l_identity_type = '-2' THEN
  122. s_identity := ' AND EXISTS (SELECT 1
  123. FROM PARTY P
  124. WHERE m.PARTY_ID = p.PARTY_ID
  125. AND p.IDENTITY_TYPE is null)';
  126. END IF;
  127.  
  128. --处理行业类型参数
  129. IF l_identity_type = '-1' THEN
  130. s_industry := ' and not exists (select 1
  131. from party_org po
  132. where m.party_id = po.party_id)';
  133. ELSIF l_identity_type = '-2' THEN
  134. s_industry := ' and exists (select 1
  135. from party_org po
  136. where m.party_id = po.party_id
  137. and po.INDUSTRY_TYPE_ID is null)';
  138. END IF;
  139.  
  140. --拼接最终查询sql
  141. s_all := s1 || s_prod_type || s_identity || s_industry;
  142. DBMS_OUTPUT.PUT_LINE(s_all);
  143. return_val := '查询sql:' || s_all;
  144. --打开通用游标
  145. OPEN cv FOR s_all;
  146. --将游标赋值给变量
  147. FETCH cv
  148. INTO revenue_rec;
  149. --关闭游标
  150. CLOSE cv;
  151.  
  152. --给本地变量赋值以便后面插入时使用(适用于对传入参数转换后使用)
  153. IF l_identity_type != '' and l_identity_type != '' THEN
  154. ll_identity_type := null;
  155. END IF;
  156.  
  157. IF l_industry_type_id = '-1' or l_industry_type_id = '-2' THEN
  158. ll_industry_type_id := null;
  159. END IF;
  160.  
  161. --执行插入
  162. insert into REVENUE_STATISTICS_RES
  163. (ID,
  164. AUDIT_CUST_NUM,
  165. AUDIT_CUST_PARTY_NUM,
  166. TY_1,
  167. TY_2,
  168. TY_3,
  169. TY_4,
  170. TY_5,
  171. TY_6,
  172. TY_7,
  173. TY_8,
  174. TY_9,
  175. TY_10,
  176. TY_11,
  177. TY_12,
  178. LY_1,
  179. LY_2,
  180. LY_3,
  181. LY_4,
  182. LY_5,
  183. LY_6,
  184. LY_7,
  185. LY_8,
  186. LY_9,
  187. LY_10,
  188. LY_11,
  189. LY_12,
  190.  
  191. PROVINCE_REGION_ID,
  192. CITY_REGION_ID,
  193. REGION_NAME,
  194.  
  195. IDENTITY_TYPE,
  196. PROD_TYPE,
  197.  
  198. INDUSTRY_TYPE_ID,
  199. INDUSTRY_TYPE_CODE,
  200. INDUSTRY_TYPE_NAME,
  201. PAR_INDUSTRY_TYPE_ID,
  202. INDUSTRY_TYPE_GRADE,
  203.  
  204. IN_DATE)
  205. select SEQ_REVENUE_STATISTICS_RES.NEXTVAL, f.*
  206. from (SELECT revenue_rec.r1,
  207. revenue_rec.r2,
  208.  
  209. revenue_rec.t1,
  210. revenue_rec.t2,
  211. revenue_rec.t3,
  212. revenue_rec.t4,
  213. revenue_rec.t5,
  214. revenue_rec.t6,
  215. revenue_rec.t7,
  216. revenue_rec.t8,
  217. revenue_rec.t9,
  218. revenue_rec.t10,
  219. revenue_rec.t11,
  220. revenue_rec.t12,
  221.  
  222. revenue_rec.y1,
  223. revenue_rec.y2,
  224. revenue_rec.y3,
  225. revenue_rec.y4,
  226. revenue_rec.y5,
  227. revenue_rec.y6,
  228. revenue_rec.y7,
  229. revenue_rec.y8,
  230. revenue_rec.y9,
  231. revenue_rec.y10,
  232. revenue_rec.y11,
  233. revenue_rec.y12,
  234.  
  235. l_p_id,
  236. l_c_id,
  237. l_region_name,
  238.  
  239. ll_identity_type,
  240. l_prod_type,
  241.  
  242. ll_industry_type_id,
  243. l_industry_code,
  244. l_industry_name,
  245. l_par_industry_id,
  246. l_industry_grade,
  247.  
  248. sysdate
  249. from dual) f;
  250. COMMIT;
  251. return_val := '插入完成';
  252. --return return_val;
  253.  
  254. /*EXCEPTION
  255. WHEN OTHERS THEN
  256. return_val := return_val || '异常编码:' || SQLCODE || ' 异常信息:' || SQLERRM;
  257. --return return_val;
  258. DBMS_OUTPUT.PUT_LINE(return_val);
  259. --抛出异常
  260. RAISE;
  261. */
  262. END;

java代码部分:

mybatis的xml:

  1. <select id="callRevenue" parameterMap="fMap" statementType="CALLABLE" >
  2. CALL PRO_REVENUE_SI(?,?,?,?,?,?,?,?,?,?,?,?,?)
  3. </select>
  4.  
  5. <parameterMap type="java.util.Map" id="fMap">
  6. <parameter property="l_p_cd" mode="IN" jdbcType="VARCHAR"/>
  7. <parameter property="l_c_cd" mode="IN" jdbcType="VARCHAR"/>
  8. <parameter property="l_prod_type" mode="IN" jdbcType="VARCHAR"/>
  9. <parameter property="l_identity_type" mode="IN" jdbcType="VARCHAR"/>
  10. <parameter property="l_industry_type_id" mode="IN" jdbcType="VARCHAR"/>
  11. <parameter property="l_p_id" mode="IN" jdbcType="VARCHAR"/>
  12. <parameter property="l_c_id" mode="IN" jdbcType="VARCHAR"/>
  13. <parameter property="l_region_name" mode="IN" jdbcType="VARCHAR"/>
  14. <parameter property="l_industry_code" mode="IN" jdbcType="VARCHAR"/>
  15. <parameter property="l_industry_name" mode="IN" jdbcType="VARCHAR"/>
  16. <parameter property="l_par_industry_id" mode="IN" jdbcType="VARCHAR"/>
  17. <parameter property="l_industry_grade" mode="IN" jdbcType="VARCHAR"/>
  18. <parameter property="return_val" mode="OUT" jdbcType="VARCHAR"/>
  19. </parameterMap>

java代码:

  1.        Map map = new HashMap();
  2. map.put("l_p_cd", ep.get("STD_PRVNCE_CD"));
  3. map.put("l_c_cd", ep.get("STD_LATN_CD"));
  4. map.put("l_prod_type", ep.get("PROD_TYPE"));
  5. map.put("l_identity_type", ep.get("IDENTITY_TYPE"));
  6. map.put("l_industry_type_id", ep.get("INDUSTRY_TYPE_ID"));
  7. map.put("l_p_id", ep.get("PROVINCE_REGION_ID"));
  8. map.put("l_c_id", ep.get("CITY_REGION_ID"));
  9. map.put("l_region_name", ep.get("REGION_NAME"));
  10. map.put("l_industry_code", ep.get("INDUSTRY_TYPE_CODE"));
  11. map.put("l_industry_name", ep.get("INDUSTRY_TYPE_NAME"));
  12. map.put("l_par_industry_id", ep.get("PAR_INDUSTRY_TYPE_ID"));
  13. map.put("l_industry_grade", ep.get("INDUSTRY_TYPE_GRADE"));
  14. map.put("return_val", "");
  15. logger.info("入参:{}",map);
  16.  
  17. String selectOne = sqlSession.selectOne("ds2", "revenueStatistics.callRevenue",map);
  18. logger.info("出参:{}",map.get("return_val"));

先查询再插入,改为存储过程,java部分入参出参、mybatisxml【我】的更多相关文章

  1. 我的一个PLSQL函数 先查询再插入数据库的函数 动态SQL拼接查询条件、通用游标、记录定义(封装部分查询字段并赋值给游标)、insert select 序列、常量【我】

    先查询再插入数据库的函数 CREATE OR REPLACE FUNCTION F_REVENUE_SI(l_p_cd in Varchar2, l_c_cd in Varchar2, l_prod_ ...

  2. Sql语句,先查询再插入一条语句完成。

    if ( (select COUNT(*) from Hr where 考勤号码 = '149' and 日期时间 = '2015/7/3 12:00:26') = 0 )INSERT  INTO [ ...

  3. JDBC调用存储过程,进参出参

    今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...

  4. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  5. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能

    主要内容:  JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...

  6. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...

  7. JDBC获取sql server存储过程查询结果集(没有出参)

    对于一些较为复杂的统计条件查询,可以通过存储过程来实现,既可以提高效率,减少网络流量,也可以避免sql语句耦合在代码中.但是存储过程返回的结果集如何获取(类似表数据),却着实让我费劲心力. 如下: C ...

  8. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  9. MySql频繁查询、插入数据

    当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...

随机推荐

  1. selenium常用的API(二)浏览器窗口设置

    浏览器窗口最大化 # encoding=utf-8 from selenium import webdriver driver = webdriver.Ie(executable_path=" ...

  2. flask基础2

    一个装饰器无法装饰多个函数的解决方法 当我们想在flask的多个视图函数前添加同一个装饰器时,如果什么都不做会报一个错 AssertionError: View function mapping is ...

  3. HL7入门书

    由我翻译HL7书,写给大忙人的HL7 链接:https://pan.baidu.com/s/16MkTj3EIDfFpqRCAIbiC2w 提取码:ndfw  

  4. python算法与数据结构-冒泡排序算法(32)

    一.冒泡排序介绍 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要 ...

  5. 《ABCD组》第九次团队作业:Beta冲刺与验收准备

    <ABCD组>第九次团队作业:Beta冲刺与验收准备 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 http ...

  6. test20190814 NOIP2019 模拟题

    二叉树 [问题描述] 从前有一棵二叉树,我们用如下方式来表示这棵二叉树. 如果一个节点没有儿子,我们用"0"来表示他. 如果一个节点有一个儿子,我们对它的表示以"1&qu ...

  7. 《了解python》

    编程语言的发展史: 1.机器语言 站在计算机角度,直接用二进制跟计算机直接沟通,直接操控硬件 优点:计算机能够直接读懂,运行速度快 缺点:开发效率低 2.汇编语言 站在计算机角度,用简单的英文标签标识 ...

  8. JavaScript基础——数组

    一 .数组的介绍 1.概念:数据的集合,任何数据都可以放在数组中 2.作用:可以同时操作多个数据 3.数组的创建: 字面量:var arr = [ ]; 构造函数:var arr = new Arra ...

  9. 洛谷 P3375 【模板】KMP字符串匹配 题解

    KMP模板,就不解释了 #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

  10. (Python) SOAP Web Service (HTTP POST)

    功能很强大,可惜只有试用 https://www.example-code.com/python/soap_web_service.asp