一直都是用sql server作為開發(fā)數(shù)據(jù)庫,最近因?yàn)殚_發(fā)新的項(xiàng)目使用oracle數(shù)據(jù)庫,我才開始學(xué)習(xí)oracle.
學(xué)習(xí)了一段時(shí)間,發(fā)現(xiàn)SQL Server和Oracle還是有這很大的差別。首先,我在SQL Server中用得很順手的自增長(zhǎng)字段就在ORACLE中找不到了,朋友說可以用序列可以實(shí)現(xiàn),于是查閱資料,整理出如下示例:
方法一
1.建立測(cè)試數(shù)據(jù)表
CREATE TABLE TEST
(
?ID?NUMBER,
?NAME?VARCHAR2(20),
?PRIMARY KEY(ID)
);
2.創(chuàng)建序列
CREATE SEQUENCE SEQ_TEST;
3.創(chuàng)建觸發(fā)器
CREATE OR REPLACE TRIGGER AUTOINCREMENT
BEFORE INSERT ON TEST
FOR EACH ROW
WHEN (NEW.ID IS NULL)
BEGIN
SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
/
4.插入數(shù)據(jù)
INSERT INTO TEST(NAME) VALUES('NAME1');
5.查看插入結(jié)果
SELECT * FROM TEST;
方法二
SQL ? Server,Sybase: ?
? 有個(gè)identity屬性可以讓系統(tǒng)自動(dòng)增1 ?
? create ? table ? a ?
? ( ?
? a1 ? int ? identity(1,1), ?
? a2 ? varchar(6) ?
? )???
? 然后在insert時(shí): ?
? insert ? into ? a ? values('hello!'); --不用管a1,系統(tǒng)會(huì)自動(dòng)增1 ?
? ?
? Oracle: ?
? 使用SEQUENCE(序列)可以達(dá)到要求 ?
? create ? table ? a ?
? ( ?
? a1 ? int ? , ?
? a2 ? varchar2(6) ?
? ); ?
? ?
? create ? SEQUENCE ? seq_a ? ? INCREMENT ? BY ? 1;???
????
? 然后在insert時(shí): ?
? insert ? into ? a ? values(seq_a.nextval,'hello!'); --seq_a.nextval是該序列的下個(gè)值
posted on 2006-11-20 00:39
Super·shen BLOG 閱讀(665)
評(píng)論(0) 編輯 收藏 所屬分類:
工作