我们拒绝平庸,拒绝随波逐流,拒绝墨守成规,让梦想不再流浪。

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%A K0INSERT INTO 表名(字段名1, 字段名2, ……) SELECT 字段名1, 字段名2, …… FROM 另外的表名;
,Ge`k:qzU9q/T5o051Testing软件测试网8J$DUn!Bo S
字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’51Testing软件测试网5m5?9Q4y V9y2@+Me
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.
a O#FeX;t0字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.
*Y(S,X?6y%\%|051Testing软件测试网tLbc"l F bQ 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软件测试网Qtu3ya6c Z H

$Y(R4iqw&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)\!b M

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\6P gV051Testing软件测试网xDWs3zrQ-?%S
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;
v!t Xp vXp0值N超过定义的长度会出错, 最好在插入前进行长度校验..
8k|\ h(P?051Testing软件测试网?`*G#L)W d$d,a-z
------------------------------------------------------------------51Testing软件测试网R;|H&YmF)|D
注意事项:51Testing软件测试网{+D;c bm(^(`,[ L
A. 以上SQL语句对表都加上了行级锁,51Testing软件测试网"Oy,Y-f-}8jp,z
确认完成后, 必须加上事物处理结束的命令 COMMIT 才能正式生效,
E@3u O G0否则改变不一定写入数据库里.
S#[9I)^y+]&|t0如果想撤回这些操作, 可以用命令 ROLLBACK 复原.
{9lu4Z5R@ts l!N051Testing软件测试网Z G!@qC {7c
B. 在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围,51Testing软件测试网I)G5ai1N.wtZX
应该把它限定在较小 (一万条记录) 范围内,. 否则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$eQl i E*n$b
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间
u,P$EV2s0
+^9V'GW9B h0创建表时可以给字段加上约束条件
E:dX4B;t#thH0例如 不允许重复 UNIQUE, 关键字 PRIMARY KEY
9B`gPt0
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`?AW&r
把表放在或取出数据库的内存区
+ZLU/c*BL b,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
I R&^I.{;K)KiUu0TRUNCATE 表名;51Testing软件测试网&UY}R3@'?S

-qN*bbsP6Y;Pfc|.u0=============================================================================================
:p\(aD!C l ]s0a7Z E0三.查询语句 (SELECT) 部分51Testing软件测试网OK\2cp!].k3J
=============================================================================================
)MX+e6{/QZ2m&j,^0
/r L7Dwj2hmp0SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] WHERE 条件;51Testing软件测试网;UR ]L6S3P{ F
51Testing软件测试网P d^huG%e L
字段名可以带入函数51Testing软件测试网yO,u1n7i8w?-A%N ]0Dl
例如: COUNT(*), MIN(字段名), MAX(字段名), AVG(字段名), DISTINCT(字段名),
)V#U:D_ I`.c']0TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')
x c3Z#U0h0---------------------------------------------------------------
4Fv P6s _rV-H1]H$ar0NVL(EXPR1, EXPR2)函数51Testing软件测试网3SVU!rL^
解释:51Testing软件测试网&j eT ~ m_
IF EXPR1=NULL51Testing软件测试网glC2_Yd~.r
RETURN EXPR251Testing软件测试网F?O5O\lQ({H
ELSE
'r)~0r0{T9_?0RETURN EXPR1
0T ?g0E.j0---------------------------------------------------------------51Testing软件测试网K$}|\|3n
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数
w8yA?)Y ^EAy0解释:51Testing软件测试网 EIj V[ }4CwD
IF AA=V1 THEN RETURN R1
'KrZ {.i*H(JQ0IF AA=V2 THEN RETURN R2
/kZHEP,d8}I:I]$sU0..…51Testing软件测试网;n7e$Ubm,t
ELSE51Testing软件测试网"F~&l"K%d
RETURN NULL
|w?d E&{7F+k x0---------------------------------------------------------------
!w&Z.h8|d9m$t0LPAD(char1,n,char2)函数51Testing软件测试网1N2N(R#X!q
解释:
"pMS-ZG8R/Q(|W0字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位
}#r.Y&r~mr8pD:`.B0---------------------------------------------------------------
EXF7J$hat9{K0字段名之间可以进行算术运算51Testing软件测试网7d LQ K lV2TQ'm Pj
例如: (字段名1*字段名1)/3
(y#\{+Gk0---------------------------------------------------------------51Testing软件测试网$N9| Hb0pQ!d@r/m
51Testing软件测试网FP,^lQ8@%EXT
查询语句可以嵌套51Testing软件测试网qloopN i}
例如: SELECT …… FROM
i4t2VyA tu5lRV-L2W0(SELECT …… FROM表名1, [表名2, ……] WHERE 条件) WHERE 条件2;51Testing软件测试网:Zu*GqTu(j [h5Bo+t
---------------------------------------------------------------
~;wO$W6z,x+[%E,}(rR0两个查询语句的结果可以做集合操作
i#s)BI#Tb*E+x0例如: 并集 UNION (去掉重复记录),
5l}_:D}0并集 UNION ALL(不去掉重复记录),
]^._.A1LH)b Y0差集 MINUS,51Testing软件测试网_%BBTfb
交集 INTERSECT51Testing软件测试网*Q@(Sr;q(p\)Ts"JF
51Testing软件测试网@ G2~n,j,f.M)zI cJ
----------------------------------------------------------------
wNISD1Hh$i0分组查询
X&]:H#^a^P0SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……] GROUP BY字段名151Testing软件测试网ht"m-w(~8D [
[HAVING 条件] ;
&r%o:r.dP9v @;Jc?0
E5^OImi*o:m0两个以上表之间的连接查询51Testing软件测试网9]$B[o0b u
51Testing软件测试网2kb9lAr@[;J b
SELECT 字段名1, 字段名2, ……
#Y:r5F+^[;TnlSl0FROM 表名1, [表名2, ……]
aN(x!o*g0WHERE 表名1.字段名 = 表名2. 字段名
%TPd!i(M![0[ AND ……] ;51Testing软件测试网 v'l P sG
51Testing软件测试网/FF7R DP)YEo
SELECT字段名1, 字段名2, ……51Testing软件测试网&\K pYt;?EJ:Vy
FROM 表名1, [表名2, ……]51Testing软件测试网*P [g'}%`@k E
WHERE 表名1.字段名 = 表名2. 字段名(+)51Testing软件测试网$@ I$]4Gc~} K'M
[ AND ……] ;51Testing软件测试网#M.} ]k7{${8I]$d`
51Testing软件测试网3}r4}/u1[8e!]8b
有(+)号的字段位置自动补空值51Testing软件测试网gF_*}(M'd,ie
----------------------------------------------------------
#Cc;G }6U7Vr0查询结果集的排序操作, 默认的排序是升序ASC, 降序是DESC51Testing软件测试网,Z:R c)ti){-JC
51Testing软件测试网PQ(j[#i0? O
SELECT字段名1, 字段名2, …… FROM 表名1, [表名2, ……]51Testing软件测试网W e9~c%nc(ks
ORDER BY字段名1, 字段名2 DESC;51Testing软件测试网 U+Al!jQZ|-Z2t5r
----------------------------------------------------------51Testing软件测试网S!Ek nCt:TfJ)P
字符串模糊比较的方法
7Q+l.t b MS5D0
sb)]be)Y3P)D%d0INSTR(字段名, ‘字符串’)>051Testing软件测试网,so9AG"wz G1M&m
字段名 LIKE ‘字符串%’ [‘%字符串%’]51Testing软件测试网 Sc3ID?t1x

9L H9q [n0每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.
A3jWx S,v.~0V051Testing软件测试网N!|cX_D7Pj
=============================================================================================
]8m Hv(SG0四.ORACLE里常用的数据对象 (SCHEMA)
-~C6bhd\k4Q;L0=============================================================================================51Testing软件测试网)|-H6U s!a)s

iF}5Tdu/H3b01.索引 (INDEX)
%NQK2KS N051Testing软件测试网4T&nQ%F`u V
CREATE INDEX 索引名ON 表名 ( 字段1, [字段2, ……] );
k$ZGXf-o3z9}f0ALTER INDEX 索引名 REBUILD;
j/Y E~:US/I&s \,O051Testing软件测试网MWje2M"B kz6h$T)l
一个表的索引最好不要超过三个 (特殊的大表除外), 最好用单字段索引, 结合SQL语句的分析执行情况,
6EBc Jm BIO.p0也可以建立多字段的组合索引和基于函数的索引51Testing软件测试网 P4JJ^4~A9]H

4W2O n},]Y2I~6JKt0ORACLE8.1.7字符串可以索引的最大长度为1578 单字节
8d~H#Ma qT0ORACLE8.0.6字符串可以索引的最大长度为758 单字节51Testing软件测试网G:M'[ v Q4ak ^,~

IG:x0|1}7e*x~+X0ORACLE DOC上说字符串最大可以建索引的长度约是:数据块的大小(db_block_size)*40%51Testing软件测试网zyz#yN/r.P(L.C#O

XRuJ\M0----------------------------------------------------------------51Testing软件测试网:U!X/\Zn5a
2.视图 (VIEW)51Testing软件测试网 N fw l9v1A%L;wI!R0X
51Testing软件测试网lg X[luXo3H*?
CREATE VIEW 视图名AS SELECT …. FROM …..;
I4^7l h%Zves)|4R'J0ALTER VIEW视图名 COMPILE;
-iHC;g6M|w2t{051Testing软件测试网l O%Zo#g`
视图仅是一个SQL查询语句, 它可以把表之间复杂的关系简洁化.
8e.`s)]&FHTj*Wx0
J&oc"CO6s nS{0----------------------------------------------------------------
%V\9oWn/YQ6\/V3L%w03.同义词 (SYNONMY)
P!S$l!N!O s0CREATE SYNONYM同义词名FOR 表名;51Testing软件测试网s5o(V H'FF
CREATE SYNONYM同义词名FOR 表名@数据库链接名;
#M`*_.Vm*e0
T6_B iHp*VZ0----------------------------------------------------------------
c-M&W0_;_2~~V04.数据库链接 (DATABASE LINK)
M!Yr,k)f9B8@ l|0CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘数据库连接字符串’;51Testing软件测试网e1d/gZ9P5xs4v2G
51Testing软件测试网l/@.C!T-}:e
数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.51Testing软件测试网;v"SnAk

4` p i@ Z i+N0数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样
(S5V#n_1},`0
R3f:~1MC0数据库全局名称可以用以下命令查出
/@0A;dxC0SELECT * FROM GLOBAL_NAME;51Testing软件测试网'A|G!Ji
51Testing软件测试网 rr ~-Ps4K
查询远端数据库里的表
f!J}4aYLnc'^0SELECT …… FROM 表名@数据库链接名;51Testing软件测试网1rhQEm{

%M7`5c9sc0=============================================================================================51Testing软件测试网*UE8K [+^g
五.权限管理 (DCL) 语句51Testing软件测试网pv {/Pkl|
=============================================================================================
H:Y.gtFEE A0
5~;|Af~!R+K@}01.GRANT 赋于权限51Testing软件测试网,|4E:~ x't
常用的系统权限集合有以下三个:
]t%qv'C1o1]3y%Y1H0CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理)
K]:|2IP%n5S*D0常用的数据对象权限有以下五个:51Testing软件测试网'k4G_Av~'fN ]
ALL ON 数据对象名, SELECT ON 数据对象名, UPDATE ON 数据对象名,
g1F\0f1s%a2M N0DELETE ON 数据对象名, INSERT ON 数据对象名, ALTER ON 数据对象名
m{'T8mh!p0
E1oz(|6Re?#d]?0GRANT CONNECT, RESOURCE TO 用户名;51Testing软件测试网5X-NAV$t x
GRANT SELECT ON 表名 TO 用户名;
`'c b7y;Z4i+V#c8U0GRANT SELECT, INSERT, DELETE ON表名 TO 用户名1, 用户名2;51Testing软件测试网2i*`l&i v1q.\Fpt`2Y
51Testing软件测试网4jLkelm
-------------------------------------------------------------------51Testing软件测试网OB jlh7qX)Ho
2.REVOKE 回收权限51Testing软件测试网)Y.ZnQ"z%o9F7P p

w'_ I iK0REVOKE CONNECT, RESOURCE FROM 用户名;
Th i*D ]/jM4@do0u Sh0REVOKE SELECT ON 表名 FROM 用户名;
I3}$A'k/N4z0REVOKE SELECT, INSERT, DELETE ON表名 FROM 用户名1, 用户名2;51Testing软件测试网_1U rB"ma}

TAG:

 

评分:0

我来说两句

日历

« 2024-04-14  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 109220
  • 日志数: 89
  • 图片数: 1
  • 文件数: 15
  • 建立时间: 2013-03-01
  • 更新时间: 2018-08-23

RSS订阅

Open Toolbar