c关于oracle 10g 的自增字段表:
create table T_Log  (
   LogID                    VARCHAR2(32)               not null,
   UserName                 VARCHAR2(32)               not null,
   LoginAddress             VARCHAR2(32)               not null,
   LogTime                  VARCHAR2(32)                       ,
   LogType                  VARCHAR2(64)                       ,
   constraint PK_T_Log primary key (LogID)
问题一、LogID为字增字段,Trigger编译报错,为何?
/*==============================================================*/
/* Sequence: SEQ_T_Log_LogID                                      */
/*==============================================================*/
create sequence SEQ_T_Log_LogID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;
/
/*==============================================================*/
/* Trigger: TRI_T_Log_LogID                                       */
/*==============================================================*/
create or replace trigger TRI_T_Log_LogID
  before insert on T_Log  
  for each row
declare
  nextid number;
begin
  if :new.LogID is null then
    select SEQ_T_Log_LogID.nextval
    into nextid
    from T_Log;
    :new.LogID:=nextid;
  end if;
end TRI_T_Log_LogID;
/
问题二、LogTime的默认值如何设置为系统时间?
问题三、在9i下正常的spool C:/KBMS_CreateLog.log语句为何10g报错。此外,大家看看这个问题http://community.csdn.net/Expert/TopicView3.asp?id=5

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER TRI_T_LOG_LOGID
    BEFORE INSERT
    ON ET_STATISTICS.T_LOG
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    declare
      nextid number;
    begin
      if :new.LogID is null then
        select SEQ_T_Log_LogID.nextval
        into nextid
        from dual;
        :new.LogID:=to_char(nextid);
      end if;
    end TRI_T_Log_LogID;
    /
      

  2.   

    问题二
    CREATE TABLE T_LOG
    (
      LOGID         VARCHAR2(32 BYTE)               NOT NULL,
      USERNAME      VARCHAR2(32 BYTE)               NOT NULL,
      LOGINADDRESS  VARCHAR2(32 BYTE)               NOT NULL,
      LOGTIME       VARCHAR2(32 BYTE)               DEFAULT sysdate,
      LOGTYPE       VARCHAR2(64 BYTE)
    )问题一
    select SEQ_T_Log_LogID.nextval
        into nextid
        from T_Log;
    改成
    select SEQ_T_Log_LogID.nextval
        into nextid
        from dual;:new.LogID:=nextid;--类型不对
     
      

  3.   

    哈哈
    谢谢问题三呢?
    还有
    ttp://community.csdn.net/Expert/TopicView3.asp?id=5分都给你
      

  4.   

    输入Http://community.csdn.net/Expert/TopicView3.asp?id=5
    就转到了http://topic.csdn.net/t/19991229/00/5.html,帖子是n年前的帖子,而且是delphi的, 不懂有关TThread的FreeOnTerminte楼主kxy(手举穿肠毒药,怀抱刮骨钢刀)1999-12-29 00:11:00 在 Delphi / VCL组件开发及应用 提问
    如果一个Thread在运行中,主程序结束,FreeOnTerminate没有   
      起作用,也就是说,Thread没有被释放,内存出现泄漏,如果Thread执行   
      完,主程序结束,Thread被释放.   
        
      OnFormClose中,Thread.Terminate,强制Thread结束也没有作用,   
      不知大家有没有好建议.   
        
      我是用,MemProof程序检查到内存泄漏的. 
      

  5.   

    问题三、在9i下正常的spool C:/KBMS_CreateLog.log语句为何10g报错。这个不好说
    不知道KBMS_CreateLog.log的内容
    也不知道抱什么错误
      

  6.   

    错了,地址是
    http://community.csdn.net/Expert/TopicView3.asp?id=5726617是“Oracle 10g 中文乱码问题”问题二改成 VARCHAR2(32 BYTE) DEFAULT sysdate,后
    insert into t_log values (null,'DDa','ad',NULL,NULL)---其中第四字段为DEFAULT sysdateselect 出来就是空值阿,没有默认值啊
      

  7.   

    insert into t_log values (null,'DDa','ad',NULL,NULL)-----因为你输入了null
    如果那个字段没有输入值,才会用他的默认值insert into T_Log  (
       LogID     ,   UserName  ,   LoginAddress,    LogType )  
    values
    (...);       这样才会用默认值