先查询再插入,改为存储过程,java部分入参出参、mybatisxml【我】
先查询再插入,改为存储过程
- create or replace procedure PRO_REVENUE_SI(l_p_cd in Varchar2,
- l_c_cd in Varchar2,
- l_prod_type in Varchar2,
- l_identity_type in Varchar2,
- l_industry_type_id in Varchar2,
- l_p_id in Varchar2,
- l_c_id in Varchar2,
- l_region_name in Varchar2,
- l_industry_code in Varchar2,
- l_industry_name in Varchar2,
- l_par_industry_id in Varchar2,
- l_industry_grade in Varchar2,
- return_val out Varchar2
- )
- IS
- /*
- DECLARE
- l_p_cd Varchar2(1000) := 8350000;
- l_c_cd Varchar2(1000) := 8350102;
- l_prod_type Varchar2(1000) := 10;
- l_identity_type Varchar2(1000) := 2;
- l_industry_type_id Varchar2(1000) := 2;
- l_p_id Varchar2(1000) := 1;
- l_c_id Varchar2(1000) := 1;
- l_region_name Varchar2(1000) := 1;
- l_industry_code Varchar2(1000) := 1;
- l_industry_name Varchar2(1000) := 1;
- l_par_industry_id Varchar2(1000) := 1;
- l_industry_grade Varchar2(1000) := 1;
- */
- --定义变量接收参数,以便对参数进行修改
- ll_identity_type varchar2(1000) := l_identity_type;
- ll_industry_type_id varchar2(1000) := l_industry_type_id;
- --函数返回值
- --return_val varchar2(8000) := '开始';
- --通用游标
- cv SYS_REFCURSOR;
- --创建记录用于封装部分查询结果
- TYPE revenue_type IS RECORD(
- r1 REVENUE_STATISTICS_RES.Audit_Cust_Num%TYPE,
- r2 REVENUE_STATISTICS_RES.AUDIT_CUST_PARTY_NUM%TYPE,
- t1 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t2 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t3 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t4 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t5 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t6 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t7 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t8 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t9 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t10 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t11 REVENUE_STATISTICS_RES.TY_1%TYPE,
- t12 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y1 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y2 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y3 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y4 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y5 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y6 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y7 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y8 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y9 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y10 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y11 REVENUE_STATISTICS_RES.TY_1%TYPE,
- y12 REVENUE_STATISTICS_RES.TY_1%TYPE);
- --声明变量为自定义记录类型
- revenue_rec revenue_type;
- --最终查询sql
- s_all varchar2(3000) := '';
- --基本SQL(注意 UPPER(m.PARTY_ID) != ''NULL'' 中字符串NULL要用4个单引号,否则执行不报错但查询结果是错的)
- s1 varchar2(1000) := 'SELECT /*+PARALLEL(12)*/
- COUNT(e.CUST_ID) AUDIT_CUST_NUM, COUNT(DISTINCT(m.PARTY_ID)) AUDIT_CUST_PARTY_NUM,
- 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,
- 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
- FROM EDA_CUST_INC e, CUST_CP_MERGE m
- WHERE
- e.CUST_ID = m.CUST_ID
- AND e.STD_LATN_CD = m.STD_LATN_CD
- and m.PARTY_ID IS NOT NULL
- AND UPPER(m.PARTY_ID) != ''NULL''
- AND e.STD_PRVNCE_CD = ' || l_p_cd ||
- ' AND e.STD_LATN_CD = ' || l_c_cd;
- --产品类型
- s_prod_type varchar2(1000) := ' AND e.PROD_TYPE =' || l_prod_type;
- --身份证类型
- s_identity varchar2(1000) := ' AND EXISTS (SELECT 1
- FROM PARTY P
- WHERE m.PARTY_ID = p.PARTY_ID
- AND p.IDENTITY_TYPE = ' ||
- l_identity_type || ')';
- --行业类型
- s_industry varchar2(1000) := ' and exists (select 1
- from party_org po
- where m.party_id = po.party_id
- and po.INDUSTRY_TYPE_ID = ' ||
- l_industry_type_id || ')';
- BEGIN
- --处理产品类型参数
- /*
- IF l_prod_type is null
- THEN
- s_prod_type := ' AND e.PROD_TYPE is null';
- END IF;
- */
- --处理身份证类型参数
- IF l_identity_type = '-1' THEN
- s_identity := ' AND not EXISTS (SELECT 1
- FROM PARTY P
- WHERE m.PARTY_ID = p.PARTY_ID)';
- ELSIF l_identity_type = '-2' THEN
- s_identity := ' AND EXISTS (SELECT 1
- FROM PARTY P
- WHERE m.PARTY_ID = p.PARTY_ID
- AND p.IDENTITY_TYPE is null)';
- END IF;
- --处理行业类型参数
- IF l_identity_type = '-1' THEN
- s_industry := ' and not exists (select 1
- from party_org po
- where m.party_id = po.party_id)';
- ELSIF l_identity_type = '-2' THEN
- s_industry := ' and exists (select 1
- from party_org po
- where m.party_id = po.party_id
- and po.INDUSTRY_TYPE_ID is null)';
- END IF;
- --拼接最终查询sql
- s_all := s1 || s_prod_type || s_identity || s_industry;
- DBMS_OUTPUT.PUT_LINE(s_all);
- return_val := '查询sql:' || s_all;
- --打开通用游标
- OPEN cv FOR s_all;
- --将游标赋值给变量
- FETCH cv
- INTO revenue_rec;
- --关闭游标
- CLOSE cv;
- --给本地变量赋值以便后面插入时使用(适用于对传入参数转换后使用)
- IF l_identity_type != '' and l_identity_type != '' THEN
- ll_identity_type := null;
- END IF;
- IF l_industry_type_id = '-1' or l_industry_type_id = '-2' THEN
- ll_industry_type_id := null;
- END IF;
- --执行插入
- insert into REVENUE_STATISTICS_RES
- (ID,
- AUDIT_CUST_NUM,
- AUDIT_CUST_PARTY_NUM,
- TY_1,
- TY_2,
- TY_3,
- TY_4,
- TY_5,
- TY_6,
- TY_7,
- TY_8,
- TY_9,
- TY_10,
- TY_11,
- TY_12,
- LY_1,
- LY_2,
- LY_3,
- LY_4,
- LY_5,
- LY_6,
- LY_7,
- LY_8,
- LY_9,
- LY_10,
- LY_11,
- LY_12,
- PROVINCE_REGION_ID,
- CITY_REGION_ID,
- REGION_NAME,
- IDENTITY_TYPE,
- PROD_TYPE,
- INDUSTRY_TYPE_ID,
- INDUSTRY_TYPE_CODE,
- INDUSTRY_TYPE_NAME,
- PAR_INDUSTRY_TYPE_ID,
- INDUSTRY_TYPE_GRADE,
- IN_DATE)
- select SEQ_REVENUE_STATISTICS_RES.NEXTVAL, f.*
- from (SELECT revenue_rec.r1,
- revenue_rec.r2,
- revenue_rec.t1,
- revenue_rec.t2,
- revenue_rec.t3,
- revenue_rec.t4,
- revenue_rec.t5,
- revenue_rec.t6,
- revenue_rec.t7,
- revenue_rec.t8,
- revenue_rec.t9,
- revenue_rec.t10,
- revenue_rec.t11,
- revenue_rec.t12,
- revenue_rec.y1,
- revenue_rec.y2,
- revenue_rec.y3,
- revenue_rec.y4,
- revenue_rec.y5,
- revenue_rec.y6,
- revenue_rec.y7,
- revenue_rec.y8,
- revenue_rec.y9,
- revenue_rec.y10,
- revenue_rec.y11,
- revenue_rec.y12,
- l_p_id,
- l_c_id,
- l_region_name,
- ll_identity_type,
- l_prod_type,
- ll_industry_type_id,
- l_industry_code,
- l_industry_name,
- l_par_industry_id,
- l_industry_grade,
- sysdate
- from dual) f;
- COMMIT;
- return_val := '插入完成';
- --return return_val;
- /*EXCEPTION
- WHEN OTHERS THEN
- return_val := return_val || '异常编码:' || SQLCODE || ' 异常信息:' || SQLERRM;
- --return return_val;
- DBMS_OUTPUT.PUT_LINE(return_val);
- --抛出异常
- RAISE;
- */
- END;
java代码部分:
mybatis的xml:
- <select id="callRevenue" parameterMap="fMap" statementType="CALLABLE" >
- CALL PRO_REVENUE_SI(?,?,?,?,?,?,?,?,?,?,?,?,?)
- </select>
- <parameterMap type="java.util.Map" id="fMap">
- <parameter property="l_p_cd" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_c_cd" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_prod_type" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_identity_type" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_industry_type_id" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_p_id" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_c_id" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_region_name" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_industry_code" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_industry_name" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_par_industry_id" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="l_industry_grade" mode="IN" jdbcType="VARCHAR"/>
- <parameter property="return_val" mode="OUT" jdbcType="VARCHAR"/>
- </parameterMap>
java代码:
- Map map = new HashMap();
- map.put("l_p_cd", ep.get("STD_PRVNCE_CD"));
- map.put("l_c_cd", ep.get("STD_LATN_CD"));
- map.put("l_prod_type", ep.get("PROD_TYPE"));
- map.put("l_identity_type", ep.get("IDENTITY_TYPE"));
- map.put("l_industry_type_id", ep.get("INDUSTRY_TYPE_ID"));
- map.put("l_p_id", ep.get("PROVINCE_REGION_ID"));
- map.put("l_c_id", ep.get("CITY_REGION_ID"));
- map.put("l_region_name", ep.get("REGION_NAME"));
- map.put("l_industry_code", ep.get("INDUSTRY_TYPE_CODE"));
- map.put("l_industry_name", ep.get("INDUSTRY_TYPE_NAME"));
- map.put("l_par_industry_id", ep.get("PAR_INDUSTRY_TYPE_ID"));
- map.put("l_industry_grade", ep.get("INDUSTRY_TYPE_GRADE"));
- map.put("return_val", "");
- logger.info("入参:{}",map);
- String selectOne = sqlSession.selectOne("ds2", "revenueStatistics.callRevenue",map);
- logger.info("出参:{}",map.get("return_val"));
先查询再插入,改为存储过程,java部分入参出参、mybatisxml【我】的更多相关文章
- 我的一个PLSQL函数 先查询再插入数据库的函数 动态SQL拼接查询条件、通用游标、记录定义(封装部分查询字段并赋值给游标)、insert select 序列、常量【我】
先查询再插入数据库的函数 CREATE OR REPLACE FUNCTION F_REVENUE_SI(l_p_cd in Varchar2, l_c_cd in Varchar2, l_prod_ ...
- Sql语句,先查询再插入一条语句完成。
if ( (select COUNT(*) from Hr where 考勤号码 = '149' and 日期时间 = '2015/7/3 12:00:26') = 0 )INSERT INTO [ ...
- JDBC调用存储过程,进参出参
今天做了一个数据表拷贝的功能,用到了存储过程,就写了一个java中用jdbc调用存储过程的代码,成功的实现了功能,晚上跑回家记录下 Connection conn = ConnectionUtil.g ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能
主要内容: JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...
- JDBC获取sql server存储过程查询结果集(没有出参)
对于一些较为复杂的统计条件查询,可以通过存储过程来实现,既可以提高效率,减少网络流量,也可以避免sql语句耦合在代码中.但是存储过程返回的结果集如何获取(类似表数据),却着实让我费劲心力. 如下: C ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- MySql频繁查询、插入数据
当我们需要频繁地从数据库查询.插入数据时,可以将这些数据库操作汇集写到同一个类里,作为工具类直接调用. 将数据库的具体信息保存在.properties文件中,用log4j作为日志记录 MySql.ja ...
随机推荐
- selenium常用的API(二)浏览器窗口设置
浏览器窗口最大化 # encoding=utf-8 from selenium import webdriver driver = webdriver.Ie(executable_path=" ...
- flask基础2
一个装饰器无法装饰多个函数的解决方法 当我们想在flask的多个视图函数前添加同一个装饰器时,如果什么都不做会报一个错 AssertionError: View function mapping is ...
- HL7入门书
由我翻译HL7书,写给大忙人的HL7 链接:https://pan.baidu.com/s/16MkTj3EIDfFpqRCAIbiC2w 提取码:ndfw
- python算法与数据结构-冒泡排序算法(32)
一.冒泡排序介绍 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要 ...
- 《ABCD组》第九次团队作业:Beta冲刺与验收准备
<ABCD组>第九次团队作业:Beta冲刺与验收准备 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 http ...
- test20190814 NOIP2019 模拟题
二叉树 [问题描述] 从前有一棵二叉树,我们用如下方式来表示这棵二叉树. 如果一个节点没有儿子,我们用"0"来表示他. 如果一个节点有一个儿子,我们对它的表示以"1&qu ...
- 《了解python》
编程语言的发展史: 1.机器语言 站在计算机角度,直接用二进制跟计算机直接沟通,直接操控硬件 优点:计算机能够直接读懂,运行速度快 缺点:开发效率低 2.汇编语言 站在计算机角度,用简单的英文标签标识 ...
- JavaScript基础——数组
一 .数组的介绍 1.概念:数据的集合,任何数据都可以放在数组中 2.作用:可以同时操作多个数据 3.数组的创建: 字面量:var arr = [ ]; 构造函数:var arr = new Arra ...
- 洛谷 P3375 【模板】KMP字符串匹配 题解
KMP模板,就不解释了 #include<iostream> #include<cstdio> #include<cstring> #include<algo ...
- (Python) SOAP Web Service (HTTP POST)
功能很强大,可惜只有试用 https://www.example-code.com/python/soap_web_service.asp