a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 111|回复: 0

[考试辅导] oracle认证应用技术学习资料汇总3

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
常用的数据字典 / }' h* I, m* q) _
  dba_constraints , C! B; m1 A$ J3 {, @/ F3 E, k
  dba_cons_columns 0 i+ f. r' s; C, y3 d$ J
  user_cons_columns 0 @' r3 a3 p# Z
  user_constraints
9 @/ z& l# r% A1 w8 I2 M* S! w( B, @4 B
简单应用
0 k* o# m9 ^- u9 ]( }" B  检验当为一个表建立主键索时后,这个字段是否满足约束非空,唯一性,而且自动建立一个索引,并查看当把约束状态关闭再次插入相同的记录,是否还能把把约束设为enable ividate状态。 ) k5 f. c# ?" Y3 q& f6 T2 k
2 G2 g' X$ u) G9 I
  SQL> create table t(i number constraint pk_i primary key,v number);
+ Z! t* ^  A5 H4 r& f8 A  SQL> insert into t values(1,2);
/ K9 i9 ]$ E2 g! i- z0 ^# W' t  SQL> insert into t values(3,4);
, ^, P7 d. Z! _  }) f; p  SQL> commit; 3 H0 _# a* {" \% ?
  SQL> select * from t;
. q; A- f, `3 k& T, n  I V ; V4 d* n+ h5 O, q4 q" _: A$ ~
  ---------- --------------------------- " ~$ S& k8 j2 T0 K* m
  1 2
* N9 A* `; I0 ^5 Z2 ]  3 4
1 _2 ?  ?: G& B/ P  现在表中有两条记录,然后给它插主键为空或相同的值
" D& g' ?# [5 }$ T9 ]& W+ ]  SQL> insert into t values(’’,10);
+ b2 P3 {& ^" k; I. F5 ]  ERROR at line 1:
: ]* U+ @8 b- L  \  w8 r  ORA-01400: cannot insert NULL into ("Y"."T"."I") : y/ {. t7 f. B* u" l
  SQL> insert into t values(1,10);
7 a; V8 |1 v: o  ERROR at line 1:
! F0 t9 G/ g- g: m( j" ?% |  ORA-00001: unique constraint (Y.PK_I) violated " {/ @/ _) `% P/ v* o
  可以看到全部报错,此时主键不能为空或重复 ! C, O& j( _* M- d% k& _% [
  查看是否建立索引 / G, k- ~5 Y8 p% r& k
  SQL> select index_name from user_indexes;
) [( U$ t4 n* K9 W" l. g) U# ]% |  S  INDEX_NAME
. V9 o9 S! @4 s+ [1 R) |  ------------------------------
! ]' Z" ^( q5 K6 j  PK_I
  s4 q% Q2 m4 Y& j! r9 P- I( G. L  把约束关闭再次做同样的操用
0 D$ p# O7 h% j; d' V  SQL> alter table t disable novalidate constraint pk_i;
- G' E2 ~0 L3 n2 Q6 }  Table altered.
' Q- a7 F+ `- o) s  SQL> insert into t values(’’,10);
. |6 ^) p. E5 A- M1 n6 ]* b9 g  1 row created. , _$ b8 a) u' \/ f! F& x8 M8 N
  SQL> insert into t values(1,10);
6 i) K, q! j( Y7 I! @. k  1 row created. 7 y) S, r; O9 \8 F- X/ Q
  SQL> commit;
% x0 P9 J$ l# G* d2 [  Commit complete.
( d/ s! A/ L; v: `" i  SQL> select * from t; 7 C  j; s+ i$ K( u- O
  I V
7 ^, V- _! F; U7 q  ---------- ----------
& D* q; J; q$ j$ D% _3 |: w9 [! s  1 2
3 ?0 x+ C0 W' o2 z, x1 h6 C  3 4
2 U7 T8 O" [/ n' Y. A) h: `  10
4 m% Y5 E. [* @% p' P  110 ) M9 @9 C3 Z$ Y) h/ F
  SQL> select index_name from user_indexes;
+ z- Q* ~0 M5 T: z% K  no rows selected % |4 `* \3 V0 q7 p- {
  可见当把约束关闭后就可以何意给表插数据了,而具索引也自动删除了。 + |1 }6 s8 G/ @& i# z" j5 ?0 p) r
  现在激活约束
1 V) j* `% }; W' g4 t  SQL> alter table t enable validate constraint pk_i;
3 F" B9 ^" B0 {1 k* b  alter table t enable validate constraint pk_i ) L7 Z8 j2 E* _, Y- o: j, h
  ERROR at line 1:
: ^3 P  n  B8 J, w2 m  ORA-02437: cannot validate (SYS.PK_I) - primary key violated : z# O1 F6 t* V# w% @4 L
  因为表中主键有相同的值所以不能恢复到enable validate状态了 * ~9 g4 L- z2 R$ A2 I  h8 X
  再次测试回复到enable novalidate ; k0 I5 z% M- M- @
  SQL> alter table t enable novalidate constraint pk_i;
$ q5 R( C4 u; T! i' G: L4 S. p, K  alter table t enable validate constraint pk_i 3 j8 [* v0 E  G$ S
  ERROR at line 1: 6 ]  O7 |3 j0 h8 b6 `
  ORA-02437: cannot validate (SYS.PK_I) - primary key violated
, ^& W" \( A* T4 q  x  _  也失败了,
6 W( `- O3 |- n% U, I  因为表中主键有了空值和相同的值,所以恢复不到enable validate状态,但enable novalidate不检查旧数据所以应该还能恢复到enable novalidate. 5 J; d8 k% l3 G) \, v) D$ ]# a
$ `/ F; _% m+ |  N7 l
  要想恢复到enable novalidate必须建立主键索引(关闭约束时自动删除的那个索引)如下: ( k- U5 V, H& @3 w  \
  SQL> create index pk_i on t(i); ( N! s( C9 r* b/ |" a
  Index created.
2 Y) g! U; W% Z" _8 W5 Z  然后恢复到enable disvalidate,以后再插数据不能为空,主键也不能重复了. / s* C2 t) `. p
  SQL> alter table t enable novalidate constraint pk_i;
: r4 L4 r/ L" _6 Q+ v7 |: y4 Q* y8 V# I  Table altered.
4 d2 k# ]  i* J5 }+ Z# {  SQL> insert into t values(1,14);
' x' g1 R5 N, ~0 v6 a. R  insert into t values(1,14) 7 b3 g/ a! C: b1 [+ s8 u
  ERROR at line 1:
# P# J/ C+ k6 [4 t' H9 t  m  ORA-00001: unique constraint (SYS.PK_I) violated
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 14:00 , Processed in 0.611823 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表