涉及到两个问题:
1.从电厂端Oracle数据库中把yxrtdata实时表的数据采集到本地Sqlserver,并作为历史表存储
2.在本地处理里yxrtdata表把在一刻钟内的电力积分成电量,然后分解时间字段,对应到竞价辅助决策系统
电厂端Oracle数据库,所要采集的表结构:
CREATE TABLE [dbo].[yxrtdata] (
[ID] [decimal](10, 0) NOT NULL ,
[GCWZDM] [char] (24) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[SZ] [decimal](1, 0) NULL ,
[SJ] [datetime] NULL
)
竞价辅助决策系统数据库(SQLserver2000)
被插入的表结构
CREATE TABLE [dbo].[CHECK_MACHINE_QUANTITY] (
[YEAR] [char] (4) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[MONTH] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[DAY] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[PERIOD_ID] [numeric](10, 0) NOT NULL ,
[POWER_PLANT_ID] [numeric](10, 0) NOT NULL ,
[MACHINE_NO] [numeric](10, 0) NOT NULL , --以上是主键
[CHECK_MACHINE_QUANTITY_EXAM_QUANTITY] [numeric](15, 4) NULL ,--要插入的电量
……………………
)
第二个问题的解决思路:对一刻钟内的sz列求和公式为:sum(sz)*60.0/3600.0/10.0,单位为(万千瓦时),sz的单位为(兆千瓦).取sj的时间部分(小时,分钟)求出所在的段(一天共96个时段).以防对方数据晚采,对历史表的处理时间段为取得最大时间的前30分钟.
一下是处理过程的部分代码。
declare @maxTime as datetime,
@powerPlantID as decimal,
@periodID as decimal,
@machineNo as decimal,
@startTime as datetime,
@endTime as datetime,
@quantity as decimal(15,6)
set @powerPlantID=32 --电厂ID,若其他电厂修改.
set @maxTime=dateadd(minute,-convert(decimal,datepart(minute,@maxTime)%15),@maxTime)
--设定起始时间
set @startTime=DateAdd(minute,-30,@maxTime)
set @endTime=DateAdd(minute,15,@startTime)
--转为第几时段
set @periodID=(convert(decimal,datepart(hour,@startTime))*60+convert(decimal,datepart
--处理1#机对应ID=207
select @quantity=sum(sz)*60.0/3600.0/10.0 from ycrtdata where id=207 and sj>=@startTime and
insert into gboss..CHECK_MACHINE_QUANTITY
values(year(@startTime),month(@startTime),day
--delete from ycrtdata where id=207 and sj>=@startTime and sj<@endTime
在Sqlserver中新建作业,每15分钟执行一次。 这样就可以实现电力积分,转为电量存到CHECK_MACHINE_QUANTITY的表中的重复作业调度。