ssm调用后台oracle存储过程统计分析数据
笔者所在项目需要一个统计本机构近6月收入情况(分两种)、本机构下级机构收入情况的需求,数据量为百万级。
具体需求是时间、机构都不确定,可为入参。 综合考虑后决定使用后台存储过程统计。
基础表结构如下:(本功能只用到红框部分)
1.创建用于返回数据的游标:
create or replace package clf_yxfx
as
type type_cursor is ref cursor;
end clf_yxfx;
2.统计本机构近6月收入情况(分契税和印花税,其中入参now为传入的年月,zgswskfj_dm为机构代码,type_cursor为返回结果集。
由于几个月份的数据在表中只占小部分,故使用中间表先单独存储需要的数据,字段(zgswskfj_dm)是一个包含子代码的机构树。
使用prior 进行遍历):
create or replace procedure getClf_yxfx(now varchar2,zgswskfj_dm varchar2,rs out clf_yxfx.type_cursor)
is
sqlText varchar2(5000);
format varchar2(10):='yyyy-mm';
begin
sqlText :='with temp as(
select t.sbssk,t.pgycsk,t.zgswskfj_dm,t.skssqq,t.skssqz,t.zsxmdm from YTH_SYMXB_FCSY t, yth_fc_jbxxb t1 where t.fcuuid = t1.uuid '
|| 'and t.skssqq > add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-6)'
|| 'and t.skssqz <= add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),1)'
|| 'and zsxmdm in (10119,10111) and trim(t.zgswskfj_dm) in(select trim(swjg_dm)'
|| 'from dm_gy_swjg START WITH trim(swjg_dm) = '|| zgswskfj_dm ||' CONNECT BY PRIOR trim(swjg_dm) = trim(sjswjg_dm)))'
--前五个月契税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-5), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-5)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4) and zsxmdm=10119 union all '
--前五个月印花税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-5), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-5)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4) and zsxmdm=10111 union all '
--前四个月契税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3) and zsxmdm=10119 union all '
--前四个月印花税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-4)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3) and zsxmdm=10111 union all '
--前三
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2) and zsxmdm=10119 union all '
--前三
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-3)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2) and zsxmdm=10111 union all '
--前二
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1) and zsxmdm=10119 union all '
--前二
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-2)'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1) and zsxmdm=10111 union all '
--前一
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1)'
|| 'and t.skssqz < to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||') and zsxmdm=10119 union all '
--前一
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),-1)'
|| 'and t.skssqz < to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||') and zsxmdm=10111 union all '
--当前月份申报契税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,1 as sz,'
|| 'to_char(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||')'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),1) and zsxmdm=10119 union all '
--当前月份申报印花税
|| 'select SUM(t.sbssk) as sb,sum(t.pgycsk) as pg,2 as sz,'
|| 'to_char(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'), '|| '''' || format || '''' ||') as sj '
|| ' from temp t where t.skssqq >=to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||')'
|| 'and t.skssqz < add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),1) and zsxmdm=10111 ';
open rs for sqlText;
end getClf_yxfx;
3.统计本月下级机构收入(不分契税、印花税,其中入参now为传入的年月,zgswskfj_dm为机构代码,type_cursor为返回结果集)
create or replace procedure getClf_yxfx_gro_jg(now varchar2,zgswskfj_dm varchar2,rs out clf_yxfx.type_cursor)
is
sqlText varchar2(32760) :='';
format varchar2(10):='yyyy-mm';
v_cur sys_refcursor;
v_swjg_dm varchar2(64);
v_swjgmc varchar2(64);
v_yxbz varchar2(2):='Y'; begin
sqlText :='with temp as(select t.sbssk as sb,t.pgycsk as pg,trim(t.zgswskfj_dm) as zgswskfj_dm from YTH_SYMXB_FCSY t, yth_fc_jbxxb t1 where t.fcuuid = t1.uuid '
|| ' and t.skssqz > to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||')'
|| ' and t.skssqz <= add_months(to_date('|| '''' || now || '''' ||','|| '''' || format || '''' ||'),1)'
|| ' and (t.zsxmdm = 10119 or t.zsxmdm = 10111)'
|| ' And Exists (Select 1 From (Select t123.swjg_dm From dm_gy_swjg t123 where t123.swjgbz=0'
|| ' and trim(t123.yxbz)='|| '''' || v_yxbz || '''' ||' Start With trim(t123.swjg_dm) ='|| zgswskfj_dm ||' Connect By Prior trim(t123.swjg_dm) =trim(t123.sjswjg_dm)) ttt'
|| ' Where trim(ttt.swjg_dm) = trim(t.zgswskfj_dm)))'; open v_cur for select trim(t.swjg_dm),t.swjgmc
from dm_gy_swjg t where trim(t.sjswjg_dm)= zgswskfj_dm
and t.swjgbz='' and trim(t.yxbz)='Y'; loop
fetch v_cur into v_swjg_dm,v_swjgmc;
exit when v_cur%notfound;
sqlText :=sqlText || 'select sum(t.sb) as sb,sum(t.pg) as pg,'
|| '''' || v_swjg_dm || '''' || ' as swjg_dm,'|| '''' || v_swjgmc || '''' || ' as swjgmc from temp t'
|| ' where 1=1'
|| ' And Exists (Select 1 From (Select t123.swjg_dm From dm_gy_swjg t123 where t123.swjgbz=0'
|| ' and trim(t123.yxbz)='|| '''' || v_yxbz || '''' ||' Start With trim(t123.swjg_dm) ='|| v_swjg_dm ||' Connect By Prior trim(t123.swjg_dm) =trim(t123.sjswjg_dm)) ttt'
|| ' Where trim(ttt.swjg_dm) = trim(t.zgswskfj_dm)) union all ';
end loop;
sqlText :=substr(sqlText,0,instr(sqlText,'union all ',-1)-1);
open rs for sqlText;
end getClf_yxfx_gro_jg;
5.过程编写好后,使用oracle 自带的sqlplus 对过程进行测试如下:
:定义输出结果集 var r_cur refcursor
:执行 exec getclf_yxfx_gro_jg('2017-08','25201000000',:r_cur);
:查看输出结果 print :r_cur
6.编写mybatis 映射文件调用过程:
mapper 映射接口:
@Component
public interface Yth_clfxyfxMapper extends IBaseService<TdzrsyxxModel>{ List<Map<String,Object>> getClf_yxfx(Map<String, Object> param); List<Map<String,Object>> getClf_yxfx_gro_jg(Map<String, Object> map);
}
mapper 映射文件(CALLABLE表示调用存储过程,与使用sqlplus执行存储过程类似,不仅需要传入参数,还需要自定义结果集接收过程的输出。
此处定义一个map用于传参,其中返回的结果集为result,类型为CURSOR):
<resultMap type="_HashMap" id="resultMap">
<result property="sb" column="sb"/>
<result property="pg" column="pg"/>
<result property="sz" column="sz"/>
<result property="sj" column="sj"/>
</resultMap> <select id="getClf_yxfx" statementType="CALLABLE" parameterType="java.util.Map">
{call getClf_yxfx(
#{now,mode=IN,jdbcType=VARCHAR},
#{zgswskfj_dm,mode=IN,jdbcType=VARCHAR},
#{result,jdbcType=CURSOR,mode=OUT,javaType=ResultSet,resultMap=resultMap}
)}
</select> <resultMap type="_HashMap" id="resultMap2">
<result property="sb" column="sb"/>
<result property="pg" column="pg"/>
<result property="swjg_dm" column="swjg_dm"/>
<result property="swjgmc" column="swjgmc"/>
</resultMap> <select id="getClf_yxfx_gro_jg" statementType="CALLABLE" parameterType="java.util.Map">
{call getClf_yxfx_gro_jg(
#{now,mode=IN,jdbcType=VARCHAR},
#{zgswskfj_dm,mode=IN,jdbcType=VARCHAR},
#{result,jdbcType=CURSOR,mode=OUT,javaType=ResultSet,resultMap=resultMap2}
)}
</select>
service 接口:
public interface IYth_clfxyfxService extends IBaseService<TdcrsyxxModel>{ Map<String, Object> query(Map<String, Object> paramMap); List<Map<String, Object>> querybyswjg(Map<String, Object> paramMap); }
service实现:(实现的关键是定义一个结果集去传入过程用于接收结果,调用过程后从map中取值即可)
重点实现:
Map<String, Object> map =new HashMap<String, Object>();
map.put("now",paramMap.get("now"));
map.put("zgswskfj_dm",paramMap.get("zgswskfj_dm"));
map.put("result", new ArrayList<Map<String,Object>>()); mapper.getClf_yxfx(map);
List<Map<String,Object>> list=(List<Map<String, Object>>) map.get("result");
本业务实现(各种计算,可不看):
@Service
public class Yth_clfxyfxServiceImpl extends BaseServiceImpl<TdcrsyxxModel> implements IYth_clfxyfxService{
@Resource
private Yth_clfxyfxMapper mapper; /**
* 数据格式
* 2017-01 1 1241 1242
* 2017-01 2 1321 1312
* 2017-02 1 1231 1322
* 2017-02 2 1512 1241
*/
@Override
public Map<String, Object> query(Map<String, Object> paramMap) { Map<String, Object> map =new HashMap<String, Object>();
map.put("now",paramMap.get("now"));
map.put("zgswskfj_dm",paramMap.get("zgswskfj_dm"));
map.put("result", new ArrayList<Map<String,Object>>()); mapper.getClf_yxfx(map);
List<Map<String,Object>> list=(List<Map<String, Object>>) map.get("result"); List<String> sj=new ArrayList<String>();
List<String> sb=new ArrayList<String>();
List<String> pg=new ArrayList<String>(); List<Object> sb_qs_yhs=new ArrayList<Object>();
List<Object> pg_qs_yhs=new ArrayList<Object>(); List<Object> sub_add=new ArrayList<Object>(); //0 1,2 3,4 5
for(int i=0;i<list.size()-1;i++){
if(i%2==0){
Map<String,Object> m=list.get(i);
Map<String,Object> m2=list.get(i+1);
String sbsk="0";
String pgsk="0";
sj.add(m.get("sj").toString());
String sb1=m.get("sb")!=null?m.get("sb").toString():"0";
String sb2=m2.get("sb")!=null?m2.get("sb").toString():"0"; String pg1=m.get("pg")!=null?m.get("pg").toString():"0";
String pg2=m2.get("pg")!=null?m2.get("pg").toString():"0"; sbsk=m.get("sb")!=null?add(m.get("sb").toString(),sbsk,2):sbsk;
sbsk=m2.get("sb")!=null?add(m2.get("sb").toString(),sbsk,2):sbsk; pgsk=m.get("pg")!=null?add(m.get("pg").toString(),pgsk,2):pgsk;
pgsk=m2.get("pg")!=null?add(m2.get("pg").toString(),pgsk,2):pgsk; sub_add.add("效应增加税款:"+sub(add(pg1,pg2,2),add(sb1,sb2,2),2)+"(元)");
sb_qs_yhs.add(" 其中契税:"+add(sb1,"0",2)+"(元)<br/> 其中印花税:"+add(sb2,"0",2)+"(元)");
pg_qs_yhs.add(" 其中契税:"+add(pg1,"0",2)+"(元)<br/> 其中印花税:"+add(pg2,"0",2)+"(元)");
pg.add(pgsk);
sb.add(sbsk);
}
}
map.put("sub_add", sub_add);
map.put("sb", sb);
map.put("pg",pg);
String sbmax= getMax(sb);
String pgmax= getMax(pg); map.put("sbmax", sbmax);
map.put("pgmax", pgmax);
List<String> a=new ArrayList<String>();
a.add(pgmax);
a.add(sbmax);
String max=getMax(a);
map.put("max",max);
map.put("avglist", getSsforY(max));
map.put("sbavg", getAvg(sb));
map.put("pgavg", getAvg(pg));
map.put("sbmin", getMin(sb));
map.put("pgmin", getMin(pg));
map.put("sj", sj);
map.put("sb_qs_yhs", sb_qs_yhs);
map.put("pg_qs_yhs", pg_qs_yhs); return map;
}
/**
* 返回6个等份的值
* @param max
* @return list
*/
private List<String> getSsforY(String max) {
Double avg=Double.parseDouble(max)/6;
List<String> b=new ArrayList<String>();
for (int i = 0; i < 7; i++) {
b.add(add("0",Double.toString(avg*i),2));
}
return b;
} /**
* 提供精确的加法运算
*
* @param v1 被加数
* @param v2 加数
* @param scale 保留scale 位小数
* @return 两个参数的和
*/
public static String add(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
} /**
* 提供精确的减法运算
*
* @param v1 被减数
* @param v2 减数
* @param scale 保留scale 位小数
* @return 两个参数的差
*/
public static String sub(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* @param list 求值list
* @return 数组最大值
*/
public static String getMax(List<String> list){
double num =Double.parseDouble(list.get(0)) ; //0为第一个数组下标
for (int i = 1; i < list.size(); i++) { //开始循环一维数组
double temp =Double.parseDouble(list.get(i)) ; //0为第一个数组下标
if (temp > num) { //循环判断数组元素
num = temp;
} //赋值给num,然后再次循环
}
return Double.toString(num);
} /**
* @param list 求值list
* @return 数组最小值
*/
public static String getMin(List<String> list){
double num =Double.parseDouble(list.get(0)) ; //0为第一个数组下标
for (int i = 1; i < list.size(); i++) { //开始循环一维数组
double temp =Double.parseDouble(list.get(i)) ; //0为第一个数组下标
if (temp < num) { //循环判断数组元素
num = temp;
} //赋值给num,然后再次循环
}
return Double.toString(num);
} /**
* @param list 求值list
* @return 数组平均值
*/
public static String getAvg(List<String> list){
double num =0.0; ; //0为第一个数组下标
for (int i = 0; i < list.size(); i++) { //开始循环一维数组
double temp =Double.parseDouble(list.get(i)) ; //0为第一个数组下标
num+=temp;
}
return add(Double.toString(num/list.size()),"0",2);
} /**
* 查当前机构的下级
*/
@Override
public List<Map<String, Object>> querybyswjg(Map<String, Object> paramMap) {
Map<String, Object> map =new HashMap<String, Object>();
map.put("now",paramMap.get("now"));
map.put("zgswskfj_dm",paramMap.get("zgswskfj_dm"));
map.put("result", new ArrayList<Map<String,Object>>()); mapper.getClf_yxfx_gro_jg(map);
List<Map<String,Object>> list=(List<Map<String, Object>>) map.get("result");
List<Map<String,Object>> returnlist=new ArrayList<Map<String,Object>>();
for (Map<String, Object> m : list) {
String sb=m.get("sb")!=null?add(m.get("sb").toString(),"0",2):"0";
String pg=m.get("pg")!=null?add(m.get("pg").toString(),"0",2):"0";
String ce=sub(pg,sb,2);
Map<String,Object> m2=new HashMap<String, Object>();
String zzl=mul((!"0".equals(sb)?divide(Double.parseDouble(ce),Double.parseDouble(sb),4):0),100)+"%";
m2.put("zzl",zzl);
m2.put("sb", sb);
m2.put("pg", pg);
m2.put("ce", ce);
m2.put("swjg_dm", m.get("swjg_dm"));
m2.put("swjgmc", m.get("swjgmc"));
returnlist.add(m2);
} return returnlist;
} /**
* 提供精确的乘法运算。
*
* @param v1
* 被乘数
* @param v2
* 乘数
* @return 两个参数的积
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
} /**
* 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。
*
* @param dividend 被除数
* @param divisor 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
public static Double divide(Double dividend, Double divisor, Integer scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
BigDecimal b1 = new BigDecimal(Double.toString(dividend));
BigDecimal b2 = new BigDecimal(Double.toString(divisor));
return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue();
} }
controller 控制层:(server实现后功能已基本完成,下面主要就是展示效果)
@RequestMapping("/query")
public void query(HttpServletRequest request,HttpServletResponse response){
Map<String, Object> paramMap = getParameterMap(request);
try {
paramMap.put("zgswskfj_dm",SqlUtil.covertTaxOrgCode(paramMap.get("swjg_dm").toString())); Map<String,Object> returnMap =yth_clfxyfxServiceImpl.query(paramMap); write(response, JSON.toJSONString(returnMap));
} catch (Exception e) {
logger.error("查询数据异常:" + e.getMessage());
}
} @RequestMapping("/query2")
public void query2(HttpServletRequest request,HttpServletResponse response){
Map<String, Object> paramMap = getParameterMap(request);
try {
paramMap.put("zgswskfj_dm",SqlUtil.covertTaxOrgCode(paramMap.get("swjg_dm").toString())); List<Map<String, Object>> list =yth_clfxyfxServiceImpl.querybyswjg(paramMap); write(response, JSON.toJSONString(list)); } catch (Exception e) {
e.printStackTrace();
logger.error("查询数据异常:" + e.getMessage());
}
}
最后放一张实现的效果图(使用到了echart插件做图表):
ssm调用后台oracle存储过程统计分析数据的更多相关文章
- oracle 存储过程实现数据CURD操作
1.创建数据库表: -- Create table create table TEST_TABLE ( userid NUMBER not null, username NVARCHAR2(50), ...
- SSM项目day4 Oracle批量插入数据bug <foreach>标签中collection属性使用的是属性名
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
- 用java调用oracle存储过程总结(转)
//1.call+包名+存储过程名(传入.传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2.建立 ...
- Oracle存储过程创建及调用(转)
在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...
- 用java调用oracle存储过程总结
以前一直没有动存储过程是用来干嘛的,后来请教朋友才换为自己的理解方式,用自己通俗的语言来说,就是把sql语句换为一个过程,也可以说是一个方法,每次直接给参数调用就好,使用存储过程查询速度快,系统只编译 ...
- 在PL/SQL中调用Oracle存储过程
存储过程 1 什么是存储过程? 用于在数据库中完成特定的操作或者任务.是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用. 2 存储过程的参数模式 存储过程的参数特性: IN类型的参数 ...
- C#调用Oracle存储过程
C#调用Oracle存储过程的代码如下所示: using System; using System.Collections.Generic; using System.Collections.Obje ...
随机推荐
- JS原型学习笔记
1.原型是函数对象的属性,它的初始值是一个空对象,这个prototype原型对象可以添加方法和属性. 2.构造器对象查找属性和方法时先查找构造器后查找原型. 3.若构造器中的属性和原型中的属性相同,构 ...
- 关于ES7里面的async和await
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享asy ...
- .NET开源工作流RoadFlow-流程运行-调试
我们在设计好流程后,往往要先经过测试,把整个流程走遍,但是一个流程要多人审批才能走完,这样换别人账号来测试流程很麻烦. 所以我们设计了一种调试模式,即可以在流程运行时看到相关信息(错误时会显示错误信息 ...
- mysql游标的用法及作用
1当前有三张表A.B.C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中:常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有2000多条 ...
- python的继承多态以及异常处理
1.单继承 # 动物类 class Animal(object): def __init__(self, name): self. __name = name def run(self): print ...
- Incorrect string value: '\xE8\xAF\xAD\xE6\x96\x87' for column 'name' at row 1
报错的原因就是在执行插入时对Name这个字段被赋予了错误的字符串值:’\xE4\xB8\xAD\xE6\x96\x87’ 实际上就函数里面的变量接收到的值编码格式跟它定义的不一致. 使用navicat ...
- python 小词云
# Author:Alex.wang# Date:2017.06.02# Version:3.6.0 import matplotlib.pyplot as pltfrom wordcloud imp ...
- C#启动外部程序(进程)
通过调用Process类可以启动系统内部(环境变量里的)或者指定位置的程序,例如: Process.Start("notepad");//启动记事本 Process.Start(& ...
- Linux系统学习之系统启动的5个过程
Linux 系统启动过程 Linux系统的启动过程可以分为5个阶段: 1. 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动.操作系统接管硬件以后 ...
- Memory Leak Detection in Embedded Systems
One of the problems with developing embedded systems is the detection of memory leaks; I've found th ...