求助:表中产生新数据后,触发执行一段SQL语句

GaussianDistribution 2015-07-15 12:59:39

Create table User01
(
uid varchar(5),
dt date,
p1 float,
p2 float
)


Create table User02
(
uid varchar(5),
weight float
)


Create table Result
(
dt date,
CV float
)


我有上面这三张表。User01是张动态的表,间隔固定时间,表中的数据会被清空,然后插入新数据。我想要实现的业务逻辑是:当User01表插入新数据后,它要和User02表进行关联,一起运算一个公式。最后把结果值插入到Result表中。

单次执行的语句是这样的:

;with cte as(
select U1.uid, U1.dt, (U1.p1-U1.p2)*U2.weight as New_p from User01 as U1
inner join User02 as U2
on U1.uid=U2.uid
)

insert into Result
select dt, STDEV(New_p)/AVG(New_p) as CV from cte
group by dt


如果是实时的自动运行是不是要使用触发器来做?我没用过涉及三张表的触发器,请各位帮帮忙。
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
既然有批量清空、插入的操作,你把这句语句加在这个操作的最后不就行了。
新数据是来做爬虫程序抓取后导入数据库的。如果这一系列语句都在java程序里面写,效率会很低。你想,程序会多一个从数据库读取数据,运算完再导入数据库的操作。
唐诗三百首 2015-07-15
  • 打赏
  • 举报
回复
User01是张动态的表,间隔固定时间,表中的数据会被清空,然后插入新数据。 --> 请问插入新数据是批量插入还是一条一条插入? 如果是批量插入,参考2楼方法即可. 如果是一条一条插入,则需等插入完成后,再执行写入Result表的语句,无法用触发器实现.
许晨旭 2015-07-15
  • 打赏
  • 举报
回复
楼上的方法应该可以了
Pact_Alice 2015-07-15
  • 打赏
  • 举报
回复
if (object_id('TR_U1', 'tr') is not null) drop trigger TR_U1 go create trigger TR_U1 on User01 --插入表中的数据 for insert as --定义变量 --给变量赋值 ;with cte as( select U1.uid, U1.dt, (U1.p1-U1.p2)*U2.weight as New_p from User01 as U1 inner join User02 as U2 on U1.uid=U2.uid ) insert into Result select dt,STDEV(New_p)/AVG(New_p) as CV from cte group by dt
Tiger_Zhao 2015-07-15
  • 打赏
  • 举报
回复
既然有批量清空、插入的操作,你把这句语句加在这个操作的最后不就行了。
 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 第1章 数据库的启动和关闭 1 1.1 数据库的启动 1 1.1.1 启动数据库到NOMOUNT状态的过程 2 1.1.2 启动数据库到MOUNT状态 18 1.1.3 启动数据库OPEN阶段 26 1.2 数据库的访问 37 1.2.1 客户端的TNSNAMES.ORA文件配置 37 1.2.2 服务器端的监听器文件listener.ora配置 39 1.2.3 通过不同服务器名对数据库的访问 41 1.2.4 动态监听器注册服务 42 1.3 数据库的关闭 46 1.3.1 数据库关闭的步骤 46 1.3.2 几种关闭方式的对比 48 第2章 控制文件与数据库初始化 51 2.1 控制文件的内容 51 2.2 SCN 53 2.2.1 SCN的定义 53 2.2.2 SCN的获取方式 53 2.2.3 SCN的进一步说明 54 2.3 检查点(Checkpoint) 57 2.3.1 检查点(Checkpoint)的工作原理 57 2.3.2 常规检查点与增量检查点 59 2.3.3 LOG_CHECKPOINT_TO_ALERT参数 63 2.3.4 控制文件与数据文件头信息 64 2.3.5 数据库的启动验证 66 2.3.6 使用备份的控制文件 70 2.3.7 FAST_START_MTTR_TARGET 71 2.3.8 关于检查点执行的案例 74 2.3.9 Oracle 10g自动检查点调整 75 2.3.10 检查点信息及恢复起点 78 2.3.11 正常关闭数据库的状况 78 2.3.12 数据库异常关闭的情况 80 2.3.13 数据库并行恢复案例一则 82 2.3.14 判断一个死事务的恢复进度 85 2.4 数据库的初始化 86 2.4.1 bootstrap$及数据库初始化过程 86 2.4.2 bootstrap$的定位 88 2.4.3 Oracle独一无二的Cache对象 89 2.4.4 Oracle数据库的引导 91 2.4.5 系统对象与bootstrap$ 92 2.4.6 bootstrap$的重要性 94 2.4.7 BBED工具的简要介绍 95 2.4.8 坏块的处理与恢复 97 第3章 参数及参数文件 103 3.1 初始化参数的分类 103 3.1.1 推导参数(Derived Parameters) 103 3.1.2 操作系统依赖参数 104 3.1.3 可变参数 104 3.1.4 初始化参数的获取 105 3.2 参数文件 107 3.2.1 PFILE和SPFILE 108 3.2.2 获取参数的视图 110 3.2.3 SPFILE的创建 111 3.2.4 SPFILE的搜索顺序 112 3.2.5 使用PFILE/SPFILE启动数据库 112 3.2.6 修改参数 113 3.2.7 解决SPFILE参数修改错误 118 3.2.8 重置SPFILE设置的参数 120 3.2.9 判断是否使用了SPFILE 120 3.2.10 SPFILE的备份与恢复 121 3.2.11 Oracle 11g参数文件恢复 127 3.2.12 如何设置Events事件 128 3.2.13 导出SPFILE文件 129 3.3 诊断案例之一:参数文件 131 3.3.1 登录系统检查告警日志文件 131 3.3.2 尝试重启动数据库 132 3.3.3 检查数据文件 132 3.3.4 MOUNT数据库,检查系统参数 133 3.3.5 检查参数文件 133 3.3.6 再次检查alert文件 134 3.3.7 修正PFILE 135 3.3.8 启动数据库 135 3.4 诊断案例之二:RAC环境参数文件 135 3.4.1 数据库资源异常 135 3.4.2 问题的发现 136 3.4.3 参数文件问题的解决 137 第4

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧