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. WPF 访问资源中的Storyboard

    原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...

  2. EnterpriseDb公司的Postgres Enterprise Manager 安装图解

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页     回到顶级页面:PostgreSQL索引页 [作者 高健@博客园  luckyjackg ...

  3. 如何优化mysql查询速度

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  4. yolo算法框架使用二

    6,voc数据集训练模型 1)下载数据集 官网提供一些voc数据,是基于2007年到2012年的,你可以通过以下地址下载到: wget https://pjreddie.com/media/files ...

  5. Permission Policies

    The Permission Policy determines Security System behavior when there are no explicitly specified per ...

  6. Unity 实现一个简单的 TPS 相机

    效果如下: 代码如下: public class TPSCamera : MonoBehaviour { /// <summary> /// 目标对象 /// </summary&g ...

  7. anaconda+pycharm的安装和应用

    至于anaconda的安装与pycharm的安装在此不做多说,主要说下遇到的问题. 问题描述: 安装anaconda后,pip下载的第三方库调用不到. 原因分析: anaconda自带的python3 ...

  8. golang -- 字符串就地取反

    字符串 定义 在golang中字符串是一种不可变的字节序列,它可以包含任意的数据,包括0值字节,但主要是人类可以阅读的文本.golang中默认字符串被解读为utf-8编码的Unicode码点(文字符号 ...

  9. 分布式消息队列RocketMQ与Kafka架构上的巨大差异

    分布式消息服务 Kafka 是一个高吞吐.高可用的消息中间件服务,适用于构建实时数据管道.流式数据处理.第三方解耦.流量削峰去谷等场景,具有大规模.高可靠.高并发访问.可扩展且完全托管的特点,是分布式 ...

  10. React Native移动开发实战-4-Android平台的适配原理

    打开Android开发工具Android Studio,选择菜单 Open an existing AndroidStudio project,打开ch04项目的android文件夹,如图5.8所示. ...