oracle复制另一个字段,【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中...

天萃荷净

分享一篇关于Oracle存储过程实现表之间数据复制功能。两表中列不同,动态的将一表中的数据复制到另一个表中案例

因为要用到回收站功能,删除一条记录,要先放到一个delete表中,以便以后恢复

要求:

1、delete表要比被删除表中多三项(用于表明删除用户,删除的是哪种用户表,删除该条数据在该用户表中的id)

2、用户表有多张(一个部门一张,但是一个部门又有多个用户,所有设计数据库时,回收站表只设置了一张,因为如果每一部门设置一张delete表,那么有很多跨部门操作,数据库最后终于一个用户的回收站里面记录整理起来很麻烦)

3、表中的记录项很多,有40多个属性,所有如果有程序来实现,数据量太大,会出现不可预期的错误,不得不用存储过程

因为自己对存储过程也不熟悉,一边写,一边学习,用了将近一天的时间,终于搞定了,其中主要难题:

1、数据存放到临时变量中,

2、对其中一个变量——表的调用

现在把存储过程放起来,也是对我自己一天工作的肯定,高手不要见笑

ALTER PROCEDURE [dbo].[copy_data]

@tablename varchar(30),

@t_id int ,

@u_id int

as

set nocount on

declare @tm varchar(500)

declare @jh int

declare @ajh int

declare @gjz varchar(100)

declare @sjms varchar(5000)

declare @fsdd varchar(100)

declare @fsrq nchar(10)

declare @zyrw varchar(1000)

declare @psz varchar(20)

declare @psrq nchar(10)

declare @tgz varchar(50)

declare @zrz varchar(50)

declare @sc nchar(4)

declare @ly varchar(8)

declare @cjh varchar(20)

declare @srz nchar(10)

declare @flh int

declare @dph nchar(10)

declare @bz varchar(500)

declare @xpdx bigint

declare @xpgs nchar(10)

declare @xpxs nchar(11)

declare @scrid int

declare @scr nchar(10)

declare @scsj datetime

declare @scbm int

declare @shr nchar(10)

declare @shsj datetime

declare @ecbz varchar(500)

declare @gdr nchar(10)

declare @gdsj datetime

declare @xgsj datetime

declare @flag nchar(1)

declare @ysurl varchar(100)

declare @ysfile varchar(250)

declare @xgurl varchar(100)

declare @xgfile varchar(250)

declare @xwurl varchar(500)

declare @xwnr varchar(4000)

declare @textall varchar(4000)

declare @fei nvarchar(4000)

set @fei=N'select @tm=[tm]

,@jh=[jh]

,@ajh=[ajh]

,@gjz=[gjz]

,@sjms=[sjms]

,@fsdd=[fsdd]

,@fsrq=[fsrq]

,@zyrw=[zyrw]

,@psz=[psz]

,@psrq=[psrq]

,@tgz=[tgz]

,@zrz=[zrz]

,@sc=[sc]

,@ly=[ly]

,@cjh=[cjh]

,@srz=[srz]

,@flh=[flh]

,@dph=[dph]

,@bz=[bz]

,@xpdx=[xpdx]

,@xpgs=[xpgs]

,@xpxs=[xpxs]

,@scrid=[scrid]

,@scr=[scr]

,@scsj=[scsj]

,@scbm=[scbm]

,@shr=[shr]

,@shsj=[shsj]

,@ecbz=[ecbz]

,@gdr=[gdr]

,@gdsj=[gdsj]

,@xgsj=[xgsj]

,@flag=[flag]

,@ysurl=[ysurl]

,@ysfile=[ysfile]

,@xgurl=[xgurl]

,@xgfile=[xgfile]

,@xwurl=[xwurl]

,@xwnr=[xwnr]

,@textall=[textall]

from ['+@tablename+N'] where id='+CAST(@t_id AS varchar(10))

exec sp_executesql @fei,

N'@tm varchar(500) OUT,

@jh int OUT,

@ajh int OUT,

@gjz varchar(100) OUT,

@sjms varchar(5000) OUT,

@fsdd varchar(100) OUT,

@fsrq nchar(10) OUT,

@zyrw varchar(1000) OUT,

@psz varchar(20) OUT,

@psrq nchar(10) OUT,

@tgz varchar(50) OUT,

@zrz varchar(50) OUT,

@sc nchar(4) OUT,

@ly varchar(8) OUT,

@cjh varchar(20) OUT,

@srz nchar(10) OUT,

@flh int OUT,

@dph nchar(10) OUT,

@bz varchar(500) OUT,

@xpdx bigint OUT,

@xpgs nchar(10) OUT,

@xpxs nchar(11) OUT,

@scrid int OUT,

@scr nchar(10) OUT,

@scsj datetime OUT,

@scbm int OUT,

@shr nchar(10) OUT,

@shsj datetime OUT,

@ecbz varchar(500) OUT,

@gdr nchar(10) OUT,

@gdsj datetime OUT,

@xgsj datetime OUT,

@flag nchar(1) OUT,

@ysurl varchar(100) OUT,

@ysfile varchar(250) OUT,

@xgurl varchar(100) OUT,

@xgfile varchar(250) OUT,

@xwurl varchar(500) OUT,

@xwnr varchar(5000) OUT,

@textall varchar(5000) OUT',

@tm? OUT,

@jh? OUT,

@ajh? OUT,

@gjz? OUT,

@sjms? OUT,

@fsdd? OUT,

@fsrq? OUT,

@zyrw? OUT,

@psz? OUT,

@psrq? OUT,

@tgz? OUT,

@zrz? OUT,

@sc? OUT,

@ly? OUT,

@cjh OUT,

@srz? OUT,

@flh? OUT,

@dph OUT,

@bz? OUT,

@xpdx? OUT,

@xpgs? OUT,

@xpxs? OUT,

@scrid? OUT,

@scr? OUT,

@scsj? OUT,

@scbm? OUT,

@shr? OUT,

@shsj? OUT,

@ecbz? OUT,

@gdr? OUT,

@gdsj? OUT,

@xgsj? OUT,

@flag OUT,

@ysurl OUT,

@ysfile? OUT,

@xgurl? OUT,

@xgfile? OUT,

@xwurl? OUT,

@xwnr? OUT,

@textall? OUT;

INSERT INTO [yx].[dbo].[S_del]

([t_id]

,[u_id]

,[u_t]

,[tm]

,[jh]

,[ajh]

,[gjz]

,[sjms]

,[fsdd]

,[fsrq]

,[zyrw]

,[psz]

,[psrq]

,[tgz]

,[zrz]

,[sc]

,[ly]

,[cjh]

,[srz]

,[flh]

,[dph]

,[bz]

,[xpdx]

,[xpgs]

,[xpxs]

,[scrid]

,[scr]

,[scsj]

,[scbm]

,[shr]

,[shsj]

,[ecbz]

,[gdr]

,[gdsj]

,[xgsj]

,[flag]

,[ysurl]

,[ysfile]

,[xgurl]

,[xgfile]

,[xwurl]

,[xwnr]

,[textall])

VALUES

(

@t_id,

@u_id,

@tablename,

@tm? ,

@jh? ,

@ajh? ,

@gjz? ,

@sjms? ,

@fsdd? ,

@fsrq? ,

@zyrw? ,

@psz? ,

@psrq? ,

@tgz? ,

@zrz? ,

@sc? ,

@ly? ,

@cjh? ,

@srz? ,

@flh? ,

@dph? ,

@bz? ,

@xpdx? ,

@xpgs? ,

@xpxs? ,

@scrid? ,

@scr? ,

@scsj? ,

@scbm? ,

@shr? ,

@shsj? ,

@ecbz? ,

@gdr? ,

@gdsj? ,

@xgsj? ,

@flag? ,

@ysurl? ,

@ysfile? ,

@xgurl? ,

@xgfile? ,

@xwurl? ,

@xwnr? ,

@textall

)

set nocount off

从企业管理器中直接导出来的,现在看看也没有什么难的哦,只是因为自己不熟悉,而使得自己在项目时间本来就是很紧张的情况下还因为这个而浪费了不少的时间。

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】Oracle存储过程 表中列不同时动态复制表中数据到另一个表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值