有一个表:
CREATE TABLE `dutswitch` (
  `ID` int(11) NOT NULL auto_increment,
  `MachineName` varchar(20) NOT NULL,
  `CustomerLotID` varchar(20) NOT NULL,
  `state` varchar(4) NOT NULL,
  `status1` varchar(64) NOT NULL,
  `status2` varchar(64) NOT NULL,
  `Date` varchar(20) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7049 ;
插入一条数据:
INSERT INTO `dutswitch` VALUES (6903, 'xx-xx', 'F925547T0J', 'FT2', 'FFFF7EFFFFFFFFFFFFFFBFFFFFFFFFFFFFFC7FFCFFCFFFCF7FDF6FEEFFFFFFFF', '0', '20090830075545');表中ID是自增长的,但是oracle中好像不支持自增长。现在我要插入一条数据,用oracle语法来写,但是不包含ID的内容,怎么才能成功写入?
insert into ('machinename','customerlotid','state','status1','status2','date') values (对应的变量);

解决方案 »

  1.   

    oracle的资增长是通过SEQUENCE来实现的。Create Sequence  
    你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  
    CREATE SEQUENCE emp_sequence  
        INCREMENT BY 1  -- 每次加几个  
        START WITH 1    -- 从1开始计数  
        NOMAXVALUE      -- 不设置最大值  
        NOCYCLE         -- 一直累加,不循环  
        CACHE 10;  一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL  
     CURRVAL=返回 sequence的当前值  
     NEXTVAL=增加sequence的值,然后返回 sequence 值  
    比如:  
      emp_sequence.CURRVAL  
      emp_sequence.NEXTVAL  可以使用sequence的地方:  
    - 不包含子查询、snapshot、VIEW的 SELECT 语句  
    - INSERT语句的子查询中  
    - NSERT语句的VALUES中  
    - UPDATE 的 SET中    可以看如下例子:  
    INSERT INTO emp VALUES   
    (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  
    SELECT empseq.currval     FROM DUAL;  
    ORACLE SEQUENCE 介绍  
    http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745039.aspx
      

  2.   

    oracle的资增长是通过SEQUENCE来实现的。 Create Sequence  
    你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  
    CREATE SEQUENCE emp_sequence  
        INCREMENT BY 1  -- 每次加几个  
        START WITH 1    -- 从1开始计数  
        NOMAXVALUE      -- 不设置最大值  
        NOCYCLE        -- 一直累加,不循环  
        CACHE 10;  一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL  
    CURRVAL=返回 sequence的当前值  
    NEXTVAL=增加sequence的值,然后返回 sequence 值  
    比如:  
      emp_sequence.CURRVAL  
      emp_sequence.NEXTVAL  可以使用sequence的地方:  
    - 不包含子查询、snapshot、VIEW的 SELECT 语句  
    - INSERT语句的子查询中  
    - NSERT语句的VALUES中  
    - UPDATE 的 SET中    可以看如下例子:  
    INSERT INTO emp VALUES  
    (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  ------------------------------------------------------------
    正解,
    同样,你也可以设置一个解发器,在insert 之前触发。
    CREATE OR REPLACE TRIGGER "TEST_INSERT_BEFORE" BEFORE
    INSERT ON emp  FOR EACH ROW 
    declare
    i_id   integer;
    begin
    select   sequence的名字.nextval   into   i_id   from   dual;
    :NEW.ID   :=   i_id;
    end;这样之后,你的SQL语句就可以写成
    INSERT INTO `dutswitch` VALUES (6903, 'xx-xx', 'F925547T0J', 'FT2', 'FFFF7EFFFFFFFFFFFFFFBFFFFFFFFFFFFFFC7FFCFFCFFFCF7FDF6FEEFFFFFFFF', '0', '20090830075545'); 完全不毕关id,id字段就会自动增长了。 
      

  3.   

    同意楼上的,呵呵,再去看一下oracle基础吧