这是我要删除的触发器:{0}CREATE OR REPLACE TRIGGER tr_td_useronline
AFTER INSERT ON td_useronline
FOR EACH ROW
DECLARE
v_cnt NUMBER;
v_totalusers NUMBER;
BEGIN
--查询今天的统计记录
SELECT COUNT(*)
INTO v_cnt
FROM td_static t
WHERE t.datecreated >= trunc(SYSDATE)
AND t.datecreated < trunc(SYSDATE) + 1;
--判断是否有统计记录
IF v_cnt = 0 THEN
--没有统计记录,先插入一条统计计录,
--总计字段的初始值为上一最大创建日期的总计值
BEGIN
SELECT a.totalusers
INTO v_totalusers
FROM td_static a
WHERE a.datecreated = (SELECT MAX(t.datecreated) FROM td_static t);
EXCEPTION
WHEN OTHERS THEN
v_totalusers := 229;
END;
INSERT INTO td_static
(datecreated, daysusers, totalusers)
VALUES
(trunc(SYSDATE), 1, v_totalusers + 1);
ELSE
--有统计记录,直接更新
UPDATE td_static t
SET t.daysusers = t.daysusers + 1, t.totalusers = t.totalusers + 1
WHERE t.datecreated >= trunc(SYSDATE)
AND t.datecreated < trunc(SYSDATE) + 1;
END IF;
END; 我采用如下语句删除该触发器,出现如下错误:
SQL> drop trigger tr_td_useronline ON td_useronline;
drop trigger tr_td_useronline ON td_useronline
*
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束
请教高手,该如何解决?
AFTER INSERT ON td_useronline
FOR EACH ROW
DECLARE
v_cnt NUMBER;
v_totalusers NUMBER;
BEGIN
--查询今天的统计记录
SELECT COUNT(*)
INTO v_cnt
FROM td_static t
WHERE t.datecreated >= trunc(SYSDATE)
AND t.datecreated < trunc(SYSDATE) + 1;
--判断是否有统计记录
IF v_cnt = 0 THEN
--没有统计记录,先插入一条统计计录,
--总计字段的初始值为上一最大创建日期的总计值
BEGIN
SELECT a.totalusers
INTO v_totalusers
FROM td_static a
WHERE a.datecreated = (SELECT MAX(t.datecreated) FROM td_static t);
EXCEPTION
WHEN OTHERS THEN
v_totalusers := 229;
END;
INSERT INTO td_static
(datecreated, daysusers, totalusers)
VALUES
(trunc(SYSDATE), 1, v_totalusers + 1);
ELSE
--有统计记录,直接更新
UPDATE td_static t
SET t.daysusers = t.daysusers + 1, t.totalusers = t.totalusers + 1
WHERE t.datecreated >= trunc(SYSDATE)
AND t.datecreated < trunc(SYSDATE) + 1;
END IF;
END; 我采用如下语句删除该触发器,出现如下错误:
SQL> drop trigger tr_td_useronline ON td_useronline;
drop trigger tr_td_useronline ON td_useronline
*
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束
请教高手,该如何解决?
解决方案 »
- 求助大神:oracle biee11 analytics登陆不进,怎么重置biee密码?
- 一个关于SQL语句的问题!
- 请教oracle冷备份
- 32位HP-UX升级到64位,oracle8.1.3升级到10g,超成数组越界可能是什么原因?
- 这条select语句有问题吗?
- 请问触发器能不能对自身的表进行修改!如果不能怎么才能实现,谢谢!
- 监听程序无法启动专用服务器进程
- 如下要求的sql语句怎么写?
- 求多主复制的技术资料,最好又实例的。
- ORACLE REPORT 6i 实例
- ORA-01031: insufficient privileges
- Oracle 11g,企业管理器登不上去。。。。。。。。
上面的触发器是根据在表td_useronline中新增一条记录
则当天用户和总用户都加1
统计信息表(触发器要更改的表)
create table td_static (
daysusers integer default 0, //今日用户数
daysposts integer default 0, //今日帖子数(所有的回帖和发帖数)
daystopics integer default 0, //今日主题数(发帖数)
totalusers integer default 0, //总用户数(从论坛4月13号到现在)
totalposts integer default 0, //总帖子数(上同)
totaltopics integer default 0, //总主题数(上同)
datecreated date default sysdate //生成时间(从4月13日,一直显示到今天,一天一条记录)
);
唐大哥,比如今天是5月28日,今天的总用户数目=表td_static 5月27号记录中的totalusers +今天的daysusers, 现在的totalusers=229;
或者
今天的总用户数=5月28号以前所有的今日用户daysusers之和+5月28日今日用户daysusers;
唐大哥,小弟还是没写出来,望你帮忙啊!
不好意思,更正一下:
昨天的(5月27日)totalusers=229
应该是昨天的totalusers+今天的dayusers就行了,只需要计算两个值。
先用这个脚本初始化一下数据:
DELETE FROM td_static t WHERE t.datecreated > trunc(SYSDATE) + 1;
UPDATE td_static a
SET a.totalusers =
(SELECT totalusers
FROM (SELECT t.datecreated,
SUM(t.daysusers) over(ORDER BY t.datecreated) totalusers
FROM td_static t) b
WHERE b.datecreated = a.datecreated);
COMMIT;