CREATE TRIGGER "mst"."TEMP_INSERT" BEFORE
INSERT ON "mst_data" FOR EACH ROW DECLARE
  time TIMESTAMP := SYSTIMESTAMP;
BEGIN
  :new.date := time;
END;大家帮我看看这段代码有问题吗?为什么我插入记录,date总是null????

解决方案 »

  1.   

    楼主,你的table中date是什么类型的?
    跟timestamp相同?如果不同的话,应该转换。CREATE TRIGGER test_trigger
    BEFORE INSERT ON table_name
    FOR EACH ROW 
    DECLARE
      time TIMESTAMP := SYSTIMESTAMP;
    BEGIN
      :new.date := TO_CHAR(time, 'MM/DD/YYYY HH24:MI:SS');
      insert into table_name values (:new.date);
    END;
      

  2.   

    首先看触发器启用没有,你在触发器中加commit试试看.
      

  3.   

    触发器是不用commit的。自动会commit的。只要没错误就可以执行的啦!
      

  4.   

    time TIMESTAMP := SYSTIMESTAMP;
    可以直接这么用吗??一般我都是:
    select SYSTIMESTAMP into time from dual;楼主不妨试试
      

  5.   

    我的测试过程:
    SQL> desc test
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     DTIME                                              TIMESTAMP(6)
     ID                                                 NUMBER(10)SQL>  1  CREATE TRIGGER TEMP_INSERT BEFORE
      2  INSERT ON test FOR EACH ROW DECLARE
      3    time TIMESTAMP := SYSTIMESTAMP;
      4  BEGIN
      5    :new.dtime := time;
      6* END;
      7  /触发器已创建SQL> insert into test(id) values(1);已创建 1 行。SQL> select * from test;DTIME
    ---------------------------------------------------------------------------
            ID
    ----------
    08-8月 -06 08.19.57.859000 上午
             1并没有发现问题。测试环境9。2。0。6问题1:DATE是保留字,不能做字段,除非加上双引号。
    问题2:试下select systimestamp from dual;是否有值存在?
      

  6.   

    同意楼上 "问题1:DATE是保留字,不能做字段,除非加上双引号。"