這個不是觸發器的問題了。
觸發器只有三種:insert,update,delete的。而且必須建立在某個表上面

解决方案 »

  1.   

    這個不是觸發器的問題了。
    觸發器只有三種:insert,update,delete的。而且必須建立在某個表上面
      

  2.   

    触发器并不仅仅指这三种,那三种只是针对表而言的,还有些触发器是针对整个库,或者某个方案(schema)的,至少oracle有。
      

  3.   

    create table create_log
    (
        session_id int not null,  -- sessionid
        drop_time  date,  -- drop的時間
        ip_address varchar2(20),  -- ip地址
        object_owner varchar2(30),  -- 對象的擁有者
        object_name varchar2(30),  -- 對象名稱
        object_type varchar2(20),  -- 對象類型
        drop_by_user varchar2(30) -- 執行drop語句的用戶
    );
    create trigger a_tri
    before create on schema
    begin
    insert into drop_log
         (session_id,
         drop_time,
         ip_address,
         object_owner,
         object_name,
         object_type,
         drop_by_user)
         values(USERENV('SESSIONID'),
         sysdate,
         SYS_CONTEXT('USERENV','IP_ADDRESS'),
         sys.dictionary_obj_owner,
         sys.dictionary_obj_name,
         sys.dictionary_obj_type,
         sys.login_user);    
    end;
    /只能获取其对象名称,对象类型,与创建它的用户,不能改变对象名称的内容
      

  4.   

    create table create_log
    (
        session_id int not null,  -- sessionid
        drop_time  date,  -- drop的時間
        ip_address varchar2(20),  -- ip地址
        object_owner varchar2(30),  -- 對象的擁有者
        object_name varchar2(30),  -- 對象名稱
        object_type varchar2(20),  -- 對象類型
        drop_by_user varchar2(30) -- 執行drop語句的用戶
    );
    create trigger a_tri
    before create on schema
    begin
    insert into drop_log
         (session_id,
         drop_time,
         ip_address,
         object_owner,
         object_name,
         object_type,
         drop_by_user)
         values(USERENV('SESSIONID'),
         sysdate,
         SYS_CONTEXT('USERENV','IP_ADDRESS'),
         sys.dictionary_obj_owner,
         sys.dictionary_obj_name,
         sys.dictionary_obj_type,
         sys.login_user);    
    end;
    /只能获取其对象名称,对象类型,与创建它的用户,不能改变对象名称的内容
      

  5.   

    是不是表的字段类型不匹配。
    create sequence SEQ_XT_LOG
    minvalue 1
    maxvalue 9999999999999999999999999999
    start with 1062
    increment by 1
    cache 20
    cycle;
    下面的触发器的作用是:任何时候表中插入或更新了行, 当前的用户名和时间都记录入行中. 并且它保证给出了雇员名称并且薪水是一个正数. CREATE TABLE emp (
        empname text,
        salary integer,
        last_date timestamp,
        last_user text
    );CREATE FUNCTION emp_stamp () RETURNS OPAQUE AS '
        BEGIN
            -- 检查是否给出了 empname 和 salary
            IF NEW.empname ISNULL THEN
                RAISE EXCEPTION ''empname cannot be NULL value'';
            END IF;
            IF NEW.salary ISNULL THEN
                RAISE EXCEPTION ''% cannot have NULL salary'', NEW.empname;
            END IF;        -- 我们必须付帐给谁?
            IF NEW.salary < 0 THEN
                RAISE EXCEPTION ''% cannot have a negative salary'', NEW.empname;
            END IF;        -- 记住何时何人的薪水被修改了
            NEW.last_date := ''now'';
            NEW.last_user := current_user;
            RETURN NEW;
        END;
    ' LANGUAGE 'plpgsql';CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
        FOR EACH ROW EXECUTE PROCEDURE emp_stamp();