oracle语法
上一篇 / 下一篇 2014-05-27 17:28:38 / 个人分类:甲骨文
=============================================================================================51Testing软件测试网 vwHU
OZ+KZ
一.数据控制语句 (DML) 部分51Testing软件测试网:O!X9T^Y)?
=============================================================================================
;^sNN&[Y01.INSERT (往数据表里插入记录的语句)51Testing软件测试网@|Z-{ lq7yA a
51Testing软件测试网p/r9soy
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
#?|5__&wK%AK0INSERT INTO 表名(字段名1, 字段名2, ……) SELECT 字段名1, 字段名2, …… FROM 另外的表名;
,Ge`k:qzU9q/T5o051Testing软件测试网8J$DUn!BoS
字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’51Testing软件测试网5m5?9Q4yV9y2@+Me
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.
a O#FeX;t0字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.
*Y(S,X?6y%\%|051Testing软件测试网t Lbc"l FbQ g~C-m
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
4aT3w!iOl.{ `G0或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)51Testing软件测试网O[Oyqy(y9lH&o
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.
L1A3ip U jkJ0年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS51Testing软件测试网Qtu3y a6cZ H
$Y(R4i q w&xm%r e"M0INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
.`A@~)G!sf0方法借用ORACLE里自带的DBMS_LOB程序包.51Testing软件测试网 H'}z#OX B Z%p'j
51Testing软件测试网/?s~.zhCx4^x;E
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号
5kYh9|}(r~0CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 151Testing软件测试网(?9Cn+\@9o-[z8l{f
MAXVALUE 99999 CYCLE NOCACHE;51Testing软件测试网;H7fR8KY1jj9rN
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
TNA"fKv3@;HIwX0INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL51Testing软件测试网g9_:[/p7tST
51Testing软件测试网W1f9G ^_tY-D q1SH
------------------------------------------------------------------51Testing软件测试网*P q9z;[ S:O\8^
2.DELETE (删除数据表里记录的语句)51Testing软件测试网/CH;H2f)\!bM
3rajUM}V:w0DELETE FROM表名 WHERE 条件;
ANb$Z/`U6L-O0
6l'fW9I'K5m0注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.51Testing软件测试网 EE(P9Zj4H/n+X
51Testing软件测试网0k5]r9UbN~
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
6p)H:zo o0TRUNCATE TABLE 表名;
.Z+EU|;fV$z*{}j0此操作不可回退.51Testing软件测试网F`&De+e QWZ
51Testing软件测试网;EF xz'@W
------------------------------------------------------------------51Testing软件测试网EN7r;Dk-Q
3.UPDATE (修改数据表里记录的语句)
,mu0@7H uf[x6t051Testing软件测试网?$dk9n Dle
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;
1\,@ k(dZ\6PgV051Testing软件测试网 xDWs3zrQ-?%S
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
v!t Xp vXp0值N超过定义的长度会出错, 最好在插入前进行长度校验..
8k|\ h(P?051Testing软件测试网?`*G#L)Wd$d,a-z
------------------------------------------------------------------51Testing软件测试网R;| H&YmF)|D
注意事项:51Testing软件测试网{+D;c bm(^(`,[L
A. 以上SQL语句对表都加上了行级锁,51Testing软件测试网"Oy,Y-f-}8jp,z
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
E@3u OG0否则改变不一定写入数据库里.
S#[9I)^y+]&|t0如果想撤回这些操作, 可以用命令 ROLLBACK 复原.
{9lu4Z5R@tsl!N051Testing软件测试网ZG!@qC {7c
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,51Testing软件测试网I)G5ai1N.wt ZX
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段.
aSJ$T7}v']ub0程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成,51Testing软件测试网8UO6h6x)s
其间加上COMMIT 确认事物处理.
&q.h$q#Wf0
!Q5mq;u$a0=============================================================================================
:So$J tS#_0二.数据定义 (DDL) 部分51Testing软件测试网BF[)_ wZ1P
=============================================================================================
.v!W/u*K4H^051Testing软件测试网9Xdwm8M(VZx
1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)
0cD!\ A$[.?0
}7z4]"?#C&g$e0ORACLE常用的字段类型有
"}dR&Q%U7zJ0CHAR 固定长度的字符串51Testing软件测试网iSp~O,w
VARCHAR2 可变长度的字符串51Testing软件测试网 @G0{yk#Lm
NUMBER(M,N) 数字型M是位数总长度, N是小数的长度
"Y,r9YV;Iq'y2UJ0DATE 日期类型
q|3pe vwC rL]%P0
G2U3ra6cox8va0创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面51Testing软件测试网0G#r2J]+L%p
eH]ISP}}k0创建表时可以用中文的字段名, 但最好还是用英文的字段名
P+yL)DP|"N c051Testing软件测试网c&v8P`2}cW
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE51Testing软件测试网7T$eQli E*n$b
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间
u,P$EV2s0
+^9V'GW9B h0创建表时可以给字段加上约束条件
E:dX4B;t#thH0例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY
9B`g Pt0
Y0~-Qp,yZP1]H0------------------------------------------------------------------51Testing软件测试网&]#AZ,\:A7T+F
2.ALTER (改变表, 索引, 视图等)
L-VPR%}1mvd0
&wDk_.W0改变表的名称
j*DU!l:`Kv J0ALTER TABLE 表名1 TO 表名2;
[i(sL6D{ e[0
b|b_|$E0在表的后面增加一个字段
-n|_ H8ljU L7Q0ALTER TABLE表名 ADD 字段名 字段名描述;
[9RGXc2@051Testing软件测试网z)Ul3a-w%gZ!h
修改表里字段的定义描述
E*t\1w+Y0ALTER TABLE表名 MODIFY字段名 字段名描述;
%K/dl[:eKQVf051Testing软件测试网\nK:S,jG&zYD(b]
给表里的字段加上约束条件51Testing软件测试网t*s+Z Iv rh
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
-p8U2S2AQ0ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);51Testing软件测试网e@6dW(h]`)O
51Testing软件测试网/Yw/W`?A W&r
把表放在或取出数据库的内存区
+ZLU/c*BLb,G~0ALTER TABLE 表名 CACHE;
3p1R$c)k.VF/r&t0D0ALTER TABLE 表名 NOCACHE;
%s O:` `2O051Testing软件测试网o?C+Haj
------------------------------------------------------------------
;Y{-A(D*L03.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)
8XC9XDP%@I0
-Q#|"SJ+Bk9pd0删除表和它所有的约束条件
c4GD*CD4c0DROP TABLE 表名 CASCADE CONSTRAINTS;51Testing软件测试网w8h/TY/}(W@R9w z1~
51Testing软件测试网 z luuF?PV
------------------------------------------------------------------
8p(F+u o$|(Z)u04.TRUNCATE (清空表里的所有记录, 保留表的结构)
VD${d\$X0
一.数据控制语句 (DML) 部分51Testing软件测试网:O!X9T^Y)?
=============================================================================================
;^sNN&[Y01.INSERT (往数据表里插入记录的语句)51Testing软件测试网@|Z-{ lq7yA a
51Testing软件测试网p/r9soy
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
#?|5__&wK%AK0INSERT INTO 表名(字段名1, 字段名2, ……) SELECT 字段名1, 字段名2, …… FROM 另外的表名;
,Ge`k:qzU9q/T5o051Testing软件测试网8J$DUn!BoS
字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’51Testing软件测试网5m5?9Q4yV9y2@+Me
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.
a O#FeX;t0字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.
*Y(S,X?6y%\%|051Testing软件测试网t Lbc"l FbQ g~C-m
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
4aT3w!iOl.{ `G0或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)51Testing软件测试网O[Oyqy(y9lH&o
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.
L1A3ip U jkJ0年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS51Testing软件测试网Qtu3y a6cZ H
$Y(R4i q w&xm%r e"M0INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
.`A@~)G!sf0方法借用ORACLE里自带的DBMS_LOB程序包.51Testing软件测试网 H'}z#OX B Z%p'j
51Testing软件测试网/?s~.zhCx4^x;E
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号
5kYh9|}(r~0CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 151Testing软件测试网(?9Cn+\@9o-[z8l{f
MAXVALUE 99999 CYCLE NOCACHE;51Testing软件测试网;H7fR8KY1jj9rN
其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999
TNA"fKv3@;HIwX0INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL51Testing软件测试网g9_:[/p7tST
51Testing软件测试网W1f9G ^_tY-D q1SH
------------------------------------------------------------------51Testing软件测试网*P q9z;[ S:O\8^
2.DELETE (删除数据表里记录的语句)51Testing软件测试网/CH;H2f)\!bM
3rajUM}V:w0DELETE FROM表名 WHERE 条件;
ANb$Z/`U6L-O0
6l'fW9I'K5m0注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.51Testing软件测试网 EE(P9Zj4H/n+X
51Testing软件测试网0k5]r9UbN~
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
6p)H:zo o0TRUNCATE TABLE 表名;
.Z+EU|;fV$z*{}j0此操作不可回退.51Testing软件测试网F`&De+e QWZ
51Testing软件测试网;EF xz'@W
------------------------------------------------------------------51Testing软件测试网EN7r;Dk-Q
3.UPDATE (修改数据表里记录的语句)
,mu0@7H uf[x6t051Testing软件测试网?$dk9n Dle
UPDATE表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;
1\,@ k(dZ\6PgV051Testing软件测试网 xDWs3zrQ-?%S
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
v!t Xp vXp0值N超过定义的长度会出错, 最好在插入前进行长度校验..
8k|\ h(P?051Testing软件测试网?`*G#L)Wd$d,a-z
------------------------------------------------------------------51Testing软件测试网R;| H&YmF)|D
注意事项:51Testing软件测试网{+D;c bm(^(`,[L
A. 以上SQL语句对表都加上了行级锁,51Testing软件测试网"Oy,Y-f-}8jp,z
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
E@3u OG0否则改变不一定写入数据库里.
S#[9I)^y+]&|t0如果想撤回这些操作, 可以用命令 ROLLBACK 复原.
{9lu4Z5R@tsl!N051Testing软件测试网ZG!@qC {7c
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,51Testing软件测试网I)G5ai1N.wt ZX
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段.
aSJ$T7}v']ub0程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成,51Testing软件测试网8UO6h6x)s
其间加上COMMIT 确认事物处理.
&q.h$q#Wf0
!Q5mq;u$a0=============================================================================================
:So$J tS#_0二.数据定义 (DDL) 部分51Testing软件测试网BF[)_ wZ1P
=============================================================================================
.v!W/u*K4H^051Testing软件测试网9Xdwm8M(VZx
1.CREATE (创建表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)
0cD!\ A$[.?0
}7z4]"?#C&g$e0ORACLE常用的字段类型有
"}dR&Q%U7zJ0CHAR 固定长度的字符串51Testing软件测试网iSp~O,w
VARCHAR2 可变长度的字符串51Testing软件测试网 @G0{yk#Lm
NUMBER(M,N) 数字型M是位数总长度, N是小数的长度
"Y,r9YV;Iq'y2UJ0DATE 日期类型
q|3pe vwC rL]%P0
G2U3ra6cox8va0创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面51Testing软件测试网0G#r2J]+L%p
eH]ISP}}k0创建表时可以用中文的字段名, 但最好还是用英文的字段名
P+yL)DP|"N c051Testing软件测试网c&v8P`2}cW
创建表时可以给字段加上默认值, 例如 DEFAULT SYSDATE51Testing软件测试网7T$eQli E*n$b
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间
u,P$EV2s0
+^9V'GW9B h0创建表时可以给字段加上约束条件
E:dX4B;t#thH0例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY
9B`g Pt0
Y0~-Qp,yZP1]H0------------------------------------------------------------------51Testing软件测试网&]#AZ,\:A7T+F
2.ALTER (改变表, 索引, 视图等)
L-VPR%}1mvd0
&wDk_.W0改变表的名称
j*DU!l:`Kv J0ALTER TABLE 表名1 TO 表名2;
[i(sL6D{ e[0
b|b_|$E0在表的后面增加一个字段
-n|_ H8ljU L7Q0ALTER TABLE表名 ADD 字段名 字段名描述;
[9RGXc2@051Testing软件测试网z)Ul3a-w%gZ!h
修改表里字段的定义描述
E*t\1w+Y0ALTER TABLE表名 MODIFY字段名 字段名描述;
%K/dl[:eKQVf051Testing软件测试网\nK:S,jG&zYD(b]
给表里的字段加上约束条件51Testing软件测试网t*s+Z Iv rh
ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY (字段名);
-p8U2S2AQ0ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名);51Testing软件测试网e@6dW(h]`)O
51Testing软件测试网/Yw/W`?A W&r
把表放在或取出数据库的内存区
+ZLU/c*BLb,G~0ALTER TABLE 表名 CACHE;
3p1R$c)k.VF/r&t0D0ALTER TABLE 表名 NOCACHE;
%s O:` `2O051Testing软件测试网o?C+Haj
------------------------------------------------------------------
;Y{-A(D*L03.DROP (删除表, 索引, 视图, 同义词, 过程, 函数, 数据库链接等)
8XC9XDP%@I0
-Q#|"SJ+Bk9pd0删除表和它所有的约束条件
c4GD*CD4c0DROP TABLE 表名 CASCADE CONSTRAINTS;51Testing软件测试网w8h/TY/}(W@R9w z1~
51Testing软件测试网 z luuF?PV
------------------------------------------------------------------
8p(F+u o$|(Z)u04.TRUNCATE (清空表里的所有记录, 保留表的结构)
VD${d\$X0