1.首先编写一个测试用的 function

 CREATE OR REPLACE FUNCTION getDealmainNo_test(dealdate        IN varchar2,
productcodename in varchar2)
/***********************************************************
* linc 2018-01-09
* 方法:获取序列编号
* 入参:成交日期,产品代码
* 返回:序列编号
***********************************************************/
RETURN varchar2 AS
today varchar2(10);
seqno integer;
begindate varchar2(20) := dealdate || ' 00:00:00';
enddate varchar2(20) := dealdate || ' 23:59:59';
seqnoname varchar2(30);
pragma autonomous_transaction;
BEGIN
seqno := 0;
select to_char(sysdate, 'yyyy-mm-dd') into today from dual;
if today = dealdate then
execute immediate 'select seq_' || productcodename ||
'_no.nextval from dual'
into seqno;
else
begin
select nvl(max(to_number(substr(s.tno, -6))), 0) + 1
into seqno
from (select s.tno
from table_A s
where s.dealdate between
to_date(begindate, 'yyyy-mm-dd hh24:mi:ss') and
to_date(enddate, 'yyyy-mm-dd hh24:mi:ss')
and s.tcode = productcodename) s ; exception
when others then
return '';
end;
end if;
seqnoname := productcodename || replace(dealdate, '-', '') ||
lpad(seqno, 6, '0');
RETURN seqnoname;
END getDealmainNo_test;

2.使用java对func进行调用 每次获得一个最大的成交编号 ;

 package main.java.javaprictice;

 import main.java.C3P0XmlSimplify;
import org.testng.annotations.Test; import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* Created by linbo.yang on 2018/1/9.
*/
public class CallOracleFunc {
Connection conn = null;
CallableStatement callableStatement = null;
PreparedStatement ps = null;
ResultSet rs; public Integer save(String no) { Integer rowCount=null ;
String sql="insert into table_A(dealdate,tno,tdate,tcode) values(?,?,?,?) ";
conn = C3P0XmlSimplify.getInstance().getConnection();
//ddate
SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH24:mm:ss");
String date = df.format(new Date());
Timestamp timestamp = Timestamp.valueOf(date);
//dealdate
SimpleDateFormat df1 =new SimpleDateFormat("yyyy-MM-dd");
String dealdate = df1.format(new Date()); try {
ps = conn.prepareStatement(sql);
ps.setDate(1,java.sql.Date.valueOf("2018-01-08"));
ps.setString(2,no);
ps.setTimestamp(3,timestamp);
ps.setString(4,"IBO");
rowCount= ps.executeUpdate();
System.out.println("rowCount"+rowCount);
} catch (SQLException e) {
e.printStackTrace();
}finally {
C3P0XmlSimplify.releaseSources(conn);
return rowCount ;
} } public String getDealmainNo() {
String string = null;
try { conn = C3P0XmlSimplify.getInstance().getConnection();
/* ?=call getDealmainNo(?,?);
* 第一个问号(?) 代表输入值,但要制定输入类型:callableStatement.registerOutParameter(1, Types.VARCHAR);
* 第二个问号(?) 代表输入值,通过callableStatement.setString()方法类制定入参的类型 ;
* 。。。。。。。
* */
callableStatement = conn.prepareCall("{?=call getDealmainNo_test(?,?)}");
callableStatement.registerOutParameter(1, Types.VARCHAR);
callableStatement.setString(2, "2018-01-08");
callableStatement.setString(3, "IBO");
callableStatement.execute();
string = callableStatement.getString(1);
System.out.println(string); } catch (Exception e) {
e.printStackTrace();
} finally {
C3P0XmlSimplify.releaseSources(conn);
return string;
}
}
@Test(threadPoolSize = 3,invocationCount = 10,timeOut = 100000)
public void getDealmainNo_() {
CallOracleFunc c=new CallOracleFunc();
String dealmainNo = c.getDealmainNo();
Integer row = c.save(dealmainNo);
System.out.println("dealmainNo="+dealmainNo+" ;row="+row); } public static void main(String[] args) {
CallOracleFunc c=new CallOracleFunc();
String dealmainNo = c.getDealmainNo();
Integer row = c.save(dealmainNo);
System.out.println("dealmainNo="+dealmainNo+" ;row="+row); } }

--数据的相关脚本

    create table table_A(
tid number ,
dealdate date ,
tcode varchar2(100),
tno varchar2(100),
tdate timestamp
) ;
drop table table_A ;
select * from table_A t where t.tid is null ;
delete table_A t where t.tid is null ;
insert into table_A
select v.ID,
v.DEALDATE,
v.PRODUCTCODE,
v.NO,
v.CREATETIME
from v_product_deal_main v ;
insert into table_A(tno,tdate) values(?,?) ; select nvl(max(to_number(substr(s.tno, -6))), 0) + 1
from (select s.tno
from table_A s
where s.dealdate between
to_date('2018-01-08 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2018-01-08 23:00:00', 'yyyy-mm-dd hh24:mi:ss')
and s.tcode = 'IBO') s

使用testng多线程来测试成交编号重复的问题的更多相关文章

  1. testng多线程并行执行测试

    testng多线程并行执行测试 testng多线程并行执行测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力.TestNG允许我们以 ...

  2. Selenium & Webdriver 远程测试和多线程并发测试

    Selenium & Webdriver 远程测试和多线程并发测试 Selenium Webdriver自动化测试,初学者可以使用selenium ide录制脚本,然后生成java程序导入ec ...

  3. 学习使用TestNG进行数据驱动测试

    转自: https://mp.weixin.qq.com/s/8Bd8LEhiC2pu2VMcyNMGlQ 学习使用TestNG进行数据驱动测试 赵吃饭 51Testing软件测试网 前天   学习使 ...

  4. Java接口多线程并发测试 (一)

    本文为作者原创,禁止转载,违者必究法律责任!!! 本文为作者原创,禁止转载,违者必究法律责任!!! Java接口多线程并发测试 一,首先写一个接口post 请求代码: import org.apach ...

  5. testNG之异常测试

    @Test(expectedExceptions = ) 在测试的时候,某些用例的输入条件,预期结果是代码抛出异常,那么这个时候就需要testNG的异常测试,先看一段会抛出异常的代码 exceptio ...

  6. TestNG多线程测试-注解方式实现

    用@Test(invocationCount = x,threadPoolSize = y)声明,invocationCount表示执行次数,threadPoolSize表示线程池大小. packag ...

  7. TestNG 多线程测试

    TestNG以注解的方式实现多线程测试 import org.testng.annotations.Test; public class TreadDemo { // invocationCount ...

  8. 利用Testng注释实现多线程并发测试

    Testng 是一款非常优秀的测试框架,真正从测试角度出发,为测试所想.在测试过程中我们经常会遇到对某一个场景做并发请求,主要想了解该程序在并发时是否会有异常或者没考虑到的其他情况,这时往往不是要做性 ...

  9. TestNG多线程测试-用xml文件实现

    MultiThreadOnXml类: package com.janson.multiThread; import org.testng.annotations.Test; public class ...

随机推荐

  1. c++ 变量共享内存-联合(union)

    共享内存极少使用,所以这里我们仅作了解. .将几个变量放在相同的内存区,但其中只有一个变量在给定时刻有有效值. .程序处理许多不同类型的数据,但是一次只处理一种.要处理的类型在执行期间才能确定. .在 ...

  2. pythonDjango开发-自定义模板标签

    1.在APP同级目录新建文件夹'templatetags' 并在文件夹下创建__init__.py和定义标签用的customer.py文件 2.在customer.py文件中定义自定义标签 from ...

  3. Jquery 实现select 3级级联查询

    实现级联效果的思路: 1. 页面加载时,先显示第一级select,第二.三级的select隐藏,根据第一级select值的改变,再显示第二级select,依次类推: 2.只从后台获取第一级select ...

  4. BLACKPYTHON学习(一)

    C/S结构了解 所谓的C/S就是客户端(client)和服务器端(server)的简称,也就是在基于这个的基础上编写相关的代码:一个就是客户端一个就是服务端. TCP(client) 客户端编写 #因 ...

  5. 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读

    本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...

  6. 随机图片api

    什么是随机图片api 随机图片api是什么呢?通俗的讲就是当你访问一个api时,浏览器会随机返回给你一张图片. 其实原理很简单,把你要随机的图片放在一起,然后写一个php,当php被访问时,就随机指向 ...

  7. LinuxMint 18.3禁用ipv6

    编辑/etc/sysctl.conf文件,添加如下内容 net.ipv6.conf.all.disable_all = 1 保存后执行 sudo sysctl -p 即可生效

  8. 一个可以自由存取的onedriver

    https://cittedu-my.sharepoint.com/personal/jostin_5gd_me/Documents/jostin

  9. 【坚持】Selenium+Python学习记录 DAY8

    2018/05/ 28 [来源:菜鸟教程](http://www.runoob.com/python3/python3-examples.html) 继续敲类相关的代码 #No.1 class peo ...

  10. .NET处理Json的几种方式

    序列化里的xml,soap,binary在上一篇文章里面已经说过了,这篇主要说json. json是目前非常流行的一种序列化数据的方式,很多api都采用的是json,结构简洁,容易理解,适用性强,逐渐 ...