有一个表:
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 (对应的变量);
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 (对应的变量);
你首先要有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
你首先要有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字段就会自动增长了。