项目里经常见到近似下面的语句:# x- c% ?# @2 _
SELECT SEQ_PROJECT.NEXTVAL FROM DUAL
" @7 ?8 T+ J- p8 Z% O 用于获取序列值。而自己并没有建树DUAL这个表,这个表是谁建树的呢,主若是用来做什么的呢?
7 N4 G& p4 K5 m; M+ P" N' D 下面是我找到的部门诠释:; d. {; Y5 z1 G8 z+ A$ S0 v- j0 s
DUAL是Oracle与数据字典一路自动建树的一个表,它只有一列:DUMMY,其数据类型为:VARCHAR2(1)。* w5 D: M! k- t6 m- }' N4 ]$ r
DUAL中只有一行数据:'X'。* v% n, s8 ~: A' w1 q% Q W! [* B
DUAL属于SYS模式,但所有用户都可以使用DUAL名称访谒它。用SELECT计较常量表达式、伪列等值时常用该表,因为它只返回一行数据,而使用其它表时可能返回多个数据行。
% E6 c, p/ m: q 在Oracle数据库中建树一个序列,使表的PK挨次生成为表建树序列7 O7 |, M, h" K) g! O8 U
CREATE SEQUENCE emp_sequence7 M! I* k: s7 ~% Y3 X
INCREMENT BY 1 -- 每次加几个
+ U' q6 `# N0 J9 l START WITH 1 -- 年夜1起头计数
5 W5 A9 f$ Z. \& t) X/ M NOMAXVALUE -- 不设置最年夜值
. i# N8 y0 |# j. M8 W7 W NOCYCLE -- 一向累加,不轮回% f4 I/ e# h' C
CACHE 100;
- ?6 [ [ l/ E7 } CREATE SEQUENCE NAD_PV_SEQU
/ w* ?! [# C0 j" Y& I, T INCREMENT BY 1, W, O4 E' b& x
START WITH 18074876 J. A, T8 p8 D2 A6 h+ U
MAXVALUE 9999999999999999997 k5 o) D9 k* k; i& j
NOCYCLE
( F2 i3 z' ~' [) f: j CACHE 100;$ N5 r" N% n& f) r( o
删除序列/ m' U' A) j, a6 a$ q7 G
DROP SEQUENCE NAD_PV_SEQU;
. l1 X- M- M9 D7 k* K- e! n/ i 为表建树序列( ], D; f# ^. l1 V7 ?1 H
CREATE SEQUENCE EMPSEQ ... ;
: ?3 I5 I7 b0 d SELECT empseq.currval FROM DUAL ;$ X" X! K. P: {1 V+ n
自动插入序列的数值
* w m! f" T! d& u5 [# v: L INSERT INTO emp2 c2 Q+ D7 C* {, X1 k7 `
VALUES (empseq.nextval, 'LEWIS', 'CLERK',/ n. H$ B9 z8 K4 M, r1 @! C
7902, SYSDATE, 1200, NULL, 20) ; |