这是我要删除的触发器:{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 命令未正确结束
请教高手,该如何解决?

解决方案 »

  1.   

    drop trigger tr_td_useronline;
      

  2.   

    另外,你的总用户是根据什么来计算的?
    上面的触发器是根据在表td_useronline中新增一条记录
    则当天用户和总用户都加1
      

  3.   

    drop trigger tr_td_useronline;
      

  4.   


    统计信息表(触发器要更改的表)
    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.   


    不好意思,更正一下:
    昨天的(5月27日)totalusers=229 
     
      

  6.   

    这样计算不好,
    应该是昨天的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;