项目里经常见到近似下面的语句:, W. p& I4 P; J8 h Q2 a; F
SELECT SEQ_PROJECT.NEXTVAL FROM DUAL @" o& @" D8 `* N% W* _2 P
用于获取序列值。而自己并没有建树DUAL这个表,这个表是谁建树的呢,主若是用来做什么的呢?
* d3 a' d7 n. g, a5 Y 下面是我找到的部门诠释:2 y. G: V' j; U
DUAL是Oracle与数据字典一路自动建树的一个表,它只有一列:DUMMY,其数据类型为:VARCHAR2(1)。; b' t% V2 T2 ]4 d' S. ^! \% y
DUAL中只有一行数据:'X'。6 E. w D! k7 l2 k$ r
DUAL属于SYS模式,但所有用户都可以使用DUAL名称访谒它。用SELECT计较常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行。% B+ W( r. a9 v" H# T" \. b
在Oracle数据库中建树一个序列,使表的PK挨次生成为表建树序列% _9 Z" [4 }2 ?* U% I2 E# b2 Q+ Y! ]
CREATE SEQUENCE emp_sequence Z4 `6 p* s" _+ }* Z F
INCREMENT BY 1 -- 每次加几个5 n( S9 v/ b) {
START WITH 1 -- 年夜1起头计数3 C ~, R3 X/ [! x( ^+ e
NOMAXVALUE -- 不设置最年夜值3 F' |* I8 I" I0 u9 ^; y
NOCYCLE -- 一向累加,不轮回1 n/ k7 W: l" o$ J* d. j, B
CACHE 100;
2 w! z [/ Z8 S- C, E" K CREATE SEQUENCE NAD_PV_SEQU! B. r( C7 b2 k8 C5 J
INCREMENT BY 1
k; {- `6 K+ q* V# y2 J( z! Y START WITH 1807487
) t- I. j7 E, | @" E MAXVALUE 999999999999999999; T! R8 E( i2 q+ F( d/ \: v" `
NOCYCLE
9 L( |- M2 x% ? CACHE 100;
8 b( |* K6 t" s9 a 删除序列
" P! J5 k a( ~6 O9 i' z5 z8 r' L DROP SEQUENCE NAD_PV_SEQU;; C3 {1 t3 g/ Z m
为表建树序列2 z+ e# w/ _% k* H! R
CREATE SEQUENCE EMPSEQ ... ;
. u' x+ C, }( |% v& n$ k7 Z& y SELECT empseq.currval FROM DUAL ;& c- S; c+ p# E |2 c
自动插入序列的数值1 v8 c# z+ f0 T0 H
INSERT INTO emp( R7 `0 V% A0 Y
VALUES (empseq.nextval, 'LEWIS', 'CLERK',# Z' \ n) P f" b# \
7902, SYSDATE, 1200, NULL, 20) ; |