最近做一个项目,由于客户数据量大,为了不将数据彻底删除,于是将数据移动到历史表,原始表的数据删除。由于技术有限,想不到好的方法,于是写个存储过程

执行,为了防止执行过程中出现异常,执行不完整。用到hIbernate事务。下面是写的代码。sql存储过程写的很麻烦,希望能给点建议:

CREATE PROCEDURE [dbo].[savetohistoryDel]
--时间
@fromtime varchar(20)
AS
BEGIN
--插入作业到历史表
INSERT INTO inout_history_job
(
jobid,jobtype,status,in_out_type,jobpos,invoicetype,isaccount,priority
,createtime,readtime,finishtime,shiftid,warehouseid,snumber,traycode
,route,op_man_id,taskid,scargo_wharea_id,scargo_space_id,scargo_alley_id
,tcargo_wharea_id,tcargo_space_id,tcargo_alley_id,jobcategory,isyfj
,isseq,indate,on_line_type,oldspacestatus,injobid,isfangfj,checkstatus
)
SELECT
jobid,jobtype,status,in_out_type,jobpos,invoicetype,isaccount,priority
,createtime,readtime,finishtime,shiftid,warehouseid,snumber,traycode
,route,op_man_id,taskid,scargo_wharea_id,scargo_space_id,scargo_alley_id
,tcargo_wharea_id,tcargo_space_id,tcargo_alley_id,jobcategory,isyfj
,isseq,indate,on_line_type,oldspacestatus,injobid,isfangfj,checkstatus
FROM
inout_job
WHERE createtime < @fromtime
--插入作业详细到历史表
INSERT INTO inout_history_jobdetail
(
jobdetailid,linestatus,jobid,inventoryid,productid,packid,lotid,punit
,jobnum,assignnum,customerid,invoiceid,invoicedetailid,boxcode,boxnumber
,productcode,isinvoice,injobdetailid,reserve1,reserve2,ownerId,lotatt1
,lotatt2,lotatt3,lotatt4,lotatt5,lotatt6,lotatt7,lotatt8,lotatt9,lotatt10
,lotatt11,lotatt12,isfj,checklot,op_man_id,scantime,isneed,ifboxcount,productstatus
,checkstatus,checktime,checkwho,reviewnum,mp
)
SELECT
jobdel.jobdetailid,jobdel.linestatus,jobdel.jobid,jobdel.inventoryid,jobdel.productid,jobdel.packid,jobdel.lotid,jobdel.punit
,jobdel.jobnum,assignnum,jobdel.customerid,jobdel.invoiceid,jobdel.invoicedetailid,jobdel.boxcode,jobdel.boxnumber
,jobdel.productcode,jobdel.isinvoice,jobdel.injobdetailid,jobdel.reserve1,jobdel.reserve2,jobdel.ownerId,jobdel.lotatt1
,jobdel.lotatt2,jobdel.lotatt3,jobdel.lotatt4,jobdel.lotatt5,jobdel.lotatt6,jobdel.lotatt7,jobdel.lotatt8,jobdel.lotatt9,jobdel.lotatt10
,jobdel.lotatt11,jobdel.lotatt12,jobdel.isfj,jobdel.checklot,jobdel.op_man_id,jobdel.scantime,jobdel.isneed,jobdel.ifboxcount,jobdel.productstatus
,jobdel.checkstatus,jobdel.checktime,jobdel.checkwho,jobdel.reviewnum,jobdel.mp
FROM
inout_jobdetail jobdel,inout_job job
WHERE job.jobid=jobdel.jobid and job.createtime < @fromtime
--删除作业和作业详细
delete jobdel from inout_jobdetail jobdel,inout_job job
WHERE job.jobid=jobdel.jobid and job.createtime < @fromtime
delete inout_job where createtime < @fromtime --插入入库单到历史表
INSERT INTO inbound_history_invoice_header
(
instockid,warehouseid,invoicedate,createtime,createmanid,instatus,intype,opmode,uploadflag
,auditmanid,auditdate,confirmanid,confirmdate,departid,shiftid,on_line_type,inpos,invoicesource,customerid
)
SELECT
instockid,warehouseid,invoicedate,createtime,createmanid,instatus,intype,opmode,uploadflag
,auditmanid,auditdate,confirmanid,confirmdate,departid,shiftid,on_line_type,inpos,invoicesource,customerid
FROM
inbound_invoice_header
WHERE createtime < @fromtime --插入入库单详细到历史表
INSERT INTO inbound_history_invoice_detail
(
instockdetailid,instockid,productid,packid,eunit,boxnum,plattenum,invoicenum,puboxnum
,puplattenum,pucnum,lotid,reserve1,reserve2,providerid,linestatus,lotatt1,lotatt2,lotatt3,lotatt4,
lotatt5,lotatt6,lotatt7,lotatt8,lotatt9,lotatt10,lotatt11,lotatt12,checklot,isdown
)
SELECT
indel.instockdetailid,indel.instockid,indel.productid,indel.packid,indel.eunit,indel.boxnum,indel.plattenum,indel.invoicenum,indel.puboxnum
,indel.puplattenum,indel.pucnum,indel.lotid,indel.reserve1,indel.reserve2,indel.providerid,indel.linestatus,indel.lotatt1,indel.lotatt2,indel.lotatt3,indel.lotatt4,
indel.lotatt5,indel.lotatt6,indel.lotatt7,indel.lotatt8,indel.lotatt9,indel.lotatt10,indel.lotatt11,indel.lotatt12,indel.checklot,indel.isdown
FROM
inbound_invoice_detail indel,inbound_invoice_header inheader
WHERE inheader.instockid=indel.instockid and inheader.createtime < @fromtime
--删除入库单详细和入库单
delete indel from inbound_invoice_detail indel,inbound_invoice_header inheader
WHERE inheader.instockid=indel.instockid and inheader.createtime < @fromtime
delete inbound_invoice_header where createtime < @fromtime
--插入出库单到历史表
INSERT INTO outbound_history_invoice_header
(
outstockid,outstatus,outtype,departid,warehouseid,warehousemanid,createtime,createmanid,formdate
,outpos,vehicleno,vehiclepos,auditmanid,auditdate,confirmanid,confirmdate,opmanid,shiftid,saleno
,on_line_type,isupload,ownerid,sendplatform,setposition,shipmentstarttime,shipmentendtime,customerid
,isfbup,accountyear
)
SELECT
outstockid,outstatus,outtype,departid,warehouseid,warehousemanid,createtime,createmanid,formdate
,outpos,vehicleno,vehiclepos,auditmanid,auditdate,confirmanid,confirmdate,opmanid,shiftid,saleno
,on_line_type,isupload,ownerid,sendplatform,setposition,shipmentstarttime,shipmentendtime,customerid
,isfbup,accountyear
FROM
outbound_invoice_header
WHERE createtime < @fromtime --插入出库单详细到历史表
INSERT INTO outbound_history_invoice_detail
(
outstockdetailid,outstockid,productid,lotid,cargo_space_id,cargo_alley_id,wh_area_id,packid,pkgunit
,invoicenum,boxnum,assignnum,assignboxnum,sendnum,sendboxnum,customid,fbFlag,traycode,reserve1,reserve2
,confirmanid,confirmdate,linestatus,lotatt1,lotatt2,lotatt3,lotatt4,lotatt5,lotatt6,lotatt7,lotatt8
,lotatt9,lotatt10,lotatt11,lotatt12
)
SELECT
outdel.outstockdetailid,outdel.outstockid,outdel.productid,outdel.lotid,outdel.cargo_space_id,outdel.cargo_alley_id,outdel.wh_area_id,outdel.packid,outdel.pkgunit
,outdel.invoicenum,boxnum,outdel.assignnum,outdel.assignboxnum,outdel.sendnum,outdel.sendboxnum,outdel.customid,outdel.fbFlag,outdel.traycode,outdel.reserve1,outdel.reserve2
,outdel.confirmanid,outdel.confirmdate,outdel.linestatus,outdel.lotatt1,outdel.lotatt2,outdel.lotatt3,outdel.lotatt4,outdel.lotatt5,outdel.lotatt6,outdel.lotatt7,outdel.lotatt8
,outdel.lotatt9,outdel.lotatt10,outdel.lotatt11,outdel.lotatt12
FROM
outbound_invoice_detail outdel,outbound_invoice_header outheader
WHERE outheader.outstockid=outdel.outstockid and outheader.createtime < @fromtime
--删除出库单详细和出库单
delete outdel from outbound_invoice_detail outdel,outbound_invoice_header outheader
WHERE outheader.outstockid=outdel.outstockid and outheader.createtime < @fromtime
delete outbound_invoice_header where createtime < @fromtime
END
    public void saveHistoryTabAndDelete(String time) throws Exception {
Session session = null;
Transaction tx = null;
try {
session = m_dao.getSession();
tx = session.beginTransaction();
SQLQuery query = session.createSQLQuery("{call savetohistoryDel(?)}");
query.setString(0, time);
query.executeUpdate();
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
}finally{
m_dao.closeSession(session);
}
}

SQL复制一个表的数据到另一个表的更多相关文章

  1. sql的存储过程实例--动态根据表数据复制一个表的数据到另一个表

    动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,则后两位10 对应表为track ...

  2. MySQL如果频繁的修改一个表的数据,那么这么表会被锁死。造成假死现象。

    MySQL如果频繁的修改一个表的数据,那么这么表会被锁死.造成假死现象. 比如用Navicat等连接工具操作,Navicat会直接未响应,只能强制关闭软件,但是重启后依然无效. 解决办法: 首先执行: ...

  3. 数据结构中La表的数据合并到Lb表中

    实验描述:La表中的数据为(3,5,8,11)  Lb 表中的数据为(2,6,8,9,11,15,20) 将La表中的数据而不存在Lb表的数据插入到Lb表中,从而实现并集操作. 出现的问题:最后实现的 ...

  4. Intent 隐式跳转,向下一个活动传递数据,向上一个活动返回数据。

    一.每个Intent只能指定一个action,多个Category. 使用隐式跳转,我们不仅可以跳转到自己程序内的活动,还可以启动其他程序的活动.使得Android多个程序之间的功能共享成为可能. 例 ...

  5. B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序

    B表中的pid对应A表中id,查询A表中数据,根据b表中对应a表中该id的数据数目排序 select a.*,count(*) as c from a left join b on a.id=b.ai ...

  6. SQL 从一个表读取数据存到另一个表

    原来没有的创建的表select * into 表A form 表B where条件 原来存在的表insert into 表A select * from 表B where 条件 INSERT INTO ...

  7. MySQL 数据库中如何把A表的数据插入到B表?

    web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码 ...

  8. 关于mysql中修改某个字段类型,以及备份表中数据到新建的表中,从新建的表中移除数据到修改过的表中

    1:修改表中某个字段的类型 alter table usertable MODIFY dddd VARCHAR(50); 其中MODIFY是指修改表中字段的属性 alter表示修改表的意思 2:备份表 ...

  9. mongo 复制一个表的数据到另一个表中

    club表: { "_id" : ObjectId("592e94fee820cc1813f0b9a2"), "id":1, "n ...

随机推荐

  1. [LintCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  2. Odoo 仓库扫码打包方案

        Odoo仓库扫码的设计,前提是操作人在PC上先做好分拣单,然后根据打印出来的分拣单去仓库进行扫码打包,默认的情况下,分拣在被确认的时候会自动保留库位中已经存在的库存(已经分配批次\序列号),而 ...

  3. mysqlbinglog基于即时点还原

    mysqlbinlog介绍 要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名.一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径. (mysql5. ...

  4. Maven学习 (四) 使用Nexus搭建Maven私服

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到 ...

  5. 实验四 Android开发基础

    实验四 Android开发基础 实验内容 1.安装Android Studio 2.运行安卓AVD模拟器 3.使用安卓运行出虚拟手机并显示HelloWorld以及自己的学号 (一)SDK的安装 (二) ...

  6. PHP第三方登录 -- 微博登录

    进化史 博客园 首页 新随笔 联系 管理 订阅 随笔- 9  文章- 0  评论- 0  php 实现qq第三方登录 学习之前,请大家先看一下oAuth协议. 首先呢,我们进入QQ互联的官方网站 ht ...

  7. Ceph与OpenStack的Glance相结合

    http://docs.ceph.com/docs/master/rbd/rbd-openstack/?highlight=nova#kilo 在Ceoh的admin-node上进行如下操作: 1. ...

  8. IE6低版本jQuery里的show和hide方法BUG

    公司内部一直在用的jQ的版本有些低,具体是哪个版本不太清楚,相关的东西都给删掉了,今天在做一个固定在页面右侧的导航的时候,IE6里出现了一个比较奇葩的问题.具体样子如下图: 收起是用定位left等于负 ...

  9. ios-改变button四个角的弧度

    -(void)createTitleView{ UIView * backview = [[UIView alloc]init]; backview.frame =CGRectMake(87*kHei ...

  10. Markdown资源 markd

    markdown是将某些格式的文本,翻译成HTML的一个库,非常精妙! https://www.npmjs.com/package/markedhttps://github.com/adam-p/ma ...