oracle学习知识点速查Word文件下载.docx
- 文档编号:16551469
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:34
- 大小:265.34KB
oracle学习知识点速查Word文件下载.docx
《oracle学习知识点速查Word文件下载.docx》由会员分享,可在线阅读,更多相关《oracle学习知识点速查Word文件下载.docx(34页珍藏版)》请在冰豆网上搜索。
用于存放于工作空间设置有关的信息。
EXAMPLE
实例表空间,存放实例信息。
INDEX
索引表空间,存放数据库索引信息。
SYSTEM
系统表空间,存放表空间名称、所含数据文件等管理信息。
TOOLS
工具表空间,存放数据库工具软件所需要的数据库对象。
UNDOTBS
回滚表空间,存放数据库恢复信息。
USERS
用户表空间,存放用户私有信息。
数据库(Database)
1.3登陆【管理服务器】
从【Oracle企业管理控制台】界面进入,如下所示:
(只能是sysman账号,其它的好像不行哦?
)
1.4数据库的启动和关闭
二SQL*PLUS基础、实例的启动与关闭
2.1登陆问题
环境:
数据库实例:
testdb。
密码:
test
Sql*plus连接
在命令行下,sys用户登陆:
sqlplus"
sys/testassysdba"
实例没有打开,使用【sqlplus"
】执行将错误ORA-12560:
TNS:
协议适配器错误!
所以使用【setoracle_sid=testdb】先打开实例。
如果目前实例没有打开,我们可以使用nolog的形式登陆:
sqlplus/nolog
无论如何都要先【setoracle_sid=testdb】,先选择数据库实例!
操作如下:
2.1.1ORA-12560:
TNS:
protocoladaptererror
正确的连接方式更改登录为sys:
SQL>
connsys/sys@服务名assysdba;
演示:
C:
\DocumentsandSettings\guocw>
sqlplus/nolog
SQL*Plus:
Release9.2.0.1.0-Productionon星期四6月1809:
12:
172009
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.
connectsys/test@testdbassysdba;
已连接。
exit
从Oracle9iEnterpriseEditionRelease9.2.0.1.0-Production
WiththePartitioning,OLAPandOracleDataMiningoptions
JServerRelease9.2.0.1.0-Production中断开
17:
422009
connscott/tiger@testdb
启动实例的命令:
Startup:
正常的命令,分为三个环节,首先启动实例;
在打开控制文件,即databasemount;
最后打开数据文件,就是databaseopen
Startupmount:
启动数据库实例的时候,同时启动控制文件,但是不启动数据文件!
我们进行热备份的时候,是不允许进行归档/非归档方式!
。
.?
Startupnomount:
启动数据库实例的时候,不启动控制文件,不启动数据文件!
关闭实例:
Shutdown:
正常关闭,要等待所有客户断开连接后,才能真正关闭。
Shutdownimmeditale:
迫使所有的用户执行完当前的sql后。
Shutdownmount:
Shutdownabout:
强行关闭。
(有丢失数据的危险,当如火灾发生、地震的时候才使用)
Sqlplus的所有的命令:
helpindex
EnterHelp[topic]forhelp.
@COPYPAUSESHUTDOWN
@@DEFINEPRINTSPOOL
/(执行缓冲区)DELPROMPTSQLPLUS
ACCEPTDESCRIBE(desc)QUITSTART
APPENDDISCONNECTRECOVERSTARTUP
ARCHIVELOGEDITREMARKSTORE
ATTRIBUTEEXECUTEREPFOOTERTIMING
BREAKEXITREPHEADERTTITLE
BTITLEGETRESERVEDWORDS(SQL)UNDEFINE
CHANGE(c)HELPRESERVEDWORDS(PL/SQL)VARIABLE
CLEARHOSTRUNWHENEVEROSERROR
COLUMN(col)INPUTSAVEWHENEVERSQLERROR
COMPUTELISTSET
CONNECTPASSWORDSHOW
EDIT(默认记事本打开缓冲区,可以对缓冲区的sql编辑,然后保存关闭即可!
list
1*select*fromdeptwheredeptno=20
edit
已写入文件afiedt.buf
1*select*fromdept
coldeptnoheading"
编号"
/
编号DNAMELOC
-------------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
DESCRIBE(desc):
对于表,我们想查看列对应的字段我们用describe(desc缩写)
报表:
几个相关命令
Oracle数据库的几种启动和关闭方式
有以下几种启动方式:
1、startupnomount
非安装启动,这种方式启动下可执行:
重建控制文件、重建数据库
读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
2、startupmountdbname
安装启动,这种方式启动下可执行:
数据库日志归档、
数据库介质恢复、
使数据文件联机或脱机,
重新定位数据文件、重做日志文件。
执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
但此时不对数据文件和日志文件进行校验检查。
3、startupopendbname
先执行“nomount”,然后执行“mount”,再打开包括Redolog文件在内的所有数据库文件,
这种方式下可访问数据库中的数据。
4、startup,等于以下三个命令
startupnomount
alterdatabasemount
alterdatabaseopen
5、startuprestrict
约束方式启动
这种方式能够启动数据库,但只允许具有一定特权的用户访问
非特权用户访问时,会出现以下提示:
ERROR:
ORA-01035:
ORACLE只允许具有RESTRICTEDSESSION权限的用户使用
6、startupforce
强制启动方式
当不能关闭数据库时,可以用startupforce来完成数据库的关闭
先关闭数据库,再执行正常启动数据库命令
7、startuppfile=参数文件名
带初始化参数文件的启动方式
先读取参数文件,再按参数文件中的设置启动数据库
例:
startuppfile=E:
\Oracle\admin\oradb\pfile\init.ora
8、startupEXCLUSIVE
============================================
有三种启动方式:
1、shutdownnormal
正常方式关闭数据库。
2、shutdownimmediate
立即方式关闭数据库。
在SVRMGRL中执行shutdownimmediate,数据库并不立即关闭,
而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),
当使用shutdown不能关闭数据库时,shutdownimmediate可以完成数据库关闭的操作。
3、shutdownabort
直接关闭数据库,正在访问数据库的会话会被突然终止,
如果数据库中有大量操作正在执行,这时执行shutdownabort后,重新启动数据库需要很长时间。
三SQL
3.1三类语言:
数据定义DDL:
create、alter、drop。
数据控制语言DCL:
grant、revoke。
数据操作语言DML:
select、insert、delete、update。
-------------------------------------------------------------------------------------------------------
createtableabc(avarchar2(10),bchar(10));
表已创建。
altertableabcaddcnumber;
表已更改。
altertableabcdropc;
altertableabcdropc
*
ERROR位于第1行:
ORA-00905:
缺少关键字
altertableabcdropcolumnc;
---------------------------------------------------------------------------------------------------------
3.2oracle常用系统函数
3.2.1字符
3.2常用系统函数
3.2.1字符length,ltrim,replace,rtrim,substr,trim
selectlength('
abcdef'
)fromdual;
查询字符数如本语句结果是6
abc好def'
7
selectlengthb('
查询字节数,为8;
selectltrim('
abc好def'
去除左边空格
selectrtrim('
abc好ef'
)fromdual;
去除左边右边空格
selecttrim('
abc'
去除两边的空格
selectlength(trim('
))fromdual;
3
selectsubstr('
abcdefg'
2,3)fromdual;
从第二个开始取串取三个即得bcd
1,3)fromdual;
取开始3个
length('
)-3+1,3)fromdual;
取末尾3个
altersessionsetNLS_DATE_FORMAT='
dd-mm-yyyyhh24:
mi:
ss'
;
设定时间格式
selectsysdatefromdual;
结果:
2009-6-1711:
32:
31
3.2.2日期sysdate,curtent_date,next_day
2009-6-1711:
40:
49
selectcurrent_datefromdual;
41:
02
altersessionsetnls_date_format='
dd-mon-yyyyhh:
当前时间2009-6-1711:
02星期三
selectnext_day(sysdate,'
星期四'
下个星期四2009-6-1811:
43:
24
星期三'
下个星期三:
2009-6-2411:
3.2.3转换to_char,to_date,to_number
selectto_char(sysdate,'
yyyy-mm-ddhh24:
转换成字符2009-06-1711:
48:
14
selectlength(to_char(sysdate,'
))fromdual;
19
selectto_date('
2009-06-1711:
14'
'
将字符串转换成日期2009-6-1711:
selectto_number('
123'
将字符串转换成数字(多大溢出?
3.2.4聚集函数sum,avg,max,min,count
selectmax(price)frombook;
求最大值
selectmin(price)frombook;
求最小值
selectavg(price)frombook;
求平均值
selectcount(price)frombook;
selectcount(*)frombook;
查询有几条记录求数据总个数
selectsum(price)frombook;
求总数
select*frombookwhereprice>
20;
3.2.5其他user,decode,nvl
selectuserfromabc;
查看用户
selectsum(decode(sex,'
男'
,1,0))男人数,sum(decode(sex,'
女'
1,0))女人数frome;
sum(decode(sex,'
,1,0))sex字段是‘男’加1,否则加0。
selecta1,nvl(a2,'
未输入'
)a2fromaa;
在null的地方写上'
select*fromaawherea2isnull;
为空
select*fromaawherea2isnotnull;
不为空
select*fromaaorderbya1asc;
升序
select*fromaaorderbya1desc;
降序
selectdistincta1fromaa;
没个a1只显示一个,不重复。
selectalla1frmaa;
3.3分组语句
用户汇总一些数据的时候:
求合计
selectsum(price*qty)frombooks;
qty数量列
按出版社(pub)分组查询的时候:
selectsum(price*qty)frombooksgroupbypub;
或
selectpub,sum(price*qty)frombooksgroupbypub;
select显示的列一定要在groupby中,否则错误!
selectpub,book_name,sum(price*qty)frombooksgroupbypub;
正确的语句应该是:
selectpub,book_name,sum(price*qty)frombooksgroupbypub,book_name;
语法上必须要求这样做。
groupby可以多个,但是必须与前面的select中得到允许。
可以增加where条件:
selectpub,sum(price*qty)frombookswhereprice>
30groupbypub;
如果这样写:
selectpub,sum(price*qty)frombookswheresum(price*qty)>
30groupbypub就要报错了!
为什么呢?
因为聚集函数不能作为条件出现在where子句后面!
要实现类似的功能,我们使用having子句去改造,groupby要出现在having子句前面。
selectpub,sum(price*qty)frombooksgroupbypubhavingsum(price*qty)>
30;
除此以外,我们很少使用having子句。
示例:
selectpub,count(pub)frombookgroupbypubhavingcount(pub)>
1;
selectftypefromtcmogroupbyftypehavingcount(moid)>
10;
3.4表的连接
内连接:
又叫等值夺标查询?
将按照等值的条件查询多个数据表中关联的数据。
要求关联的多个数据表的某些字段具有相同的属性,即有相同的数据类型、宽度和取值范围。
正规的写法select*fromtcmoajointcmotypebona.ftype=b.fmotype;
select*fromtcmoa,tcmotypebwherea.ftype=b.fmotype;
外连接有两种:
左(外)连接和右(外)连接
左连接:
正规的写法select*fromtcmoaleftjointcmotypebona.ftype=b.fmotype;
select*fromtcmoa,tcmotypebwherea.ftype=b.fmotype(+);
右连接:
正规的写法select*fromtcmoarightjointcmotypebona.ftype=b.fmotype;
select*fromtcmoa,tcmotypebwherea.ftype(+)=b.fmotype;
还可以在查询中添加其他条件:
两种写法有一些差别
select*fromtcmoarightjointcmotypebona.ftype=b.fmotypewherea.ftype='
LINUX'
select*fromtcmoa,tcmotypebwherea.ftype(+)=b.fmotypeanda.ftype='
3.5子查询IN、EXISTS
相关子查询
无关子查询
有的时候,子查询与连接查询都能得到相同的结果:
谁的效率更高呢?
3.6where与having
where检查每条记录是否符合条件,having是检查分组后的各族是否满足条件。
Having语句只能配合groupby语句使用,没有groupby时不能使用having,单可以使用where。
3.7嵌套更新
语法:
update数据表
set字段名1=(select字段列from数据表where条件),字段名2=(select字段列from数据表where条件),……
Where更新条件;
四PL/SQL
PL/SQL是Oracle对sql的一种扩展语言!
命令行下要显示输出行:
setserveroutputonsize10000(最大可设置一万)!
4.1第一个例子
declare
inumber:
=1;
xvarchar2(20):
='
初值'
begin
dbms_output.put_line('
打印一行.初值i='
||i);
dbms_output.put_line(x);
i:
=10;
x:
thisis...'
--字符串连接||。
行注释--
--快注释/*注释内容*/
打印一行.i='
end;
4.2分支语句
4.2.1if分支
inumber;
strvarchar2(20);
=2;
ifi=1then
str:
sno001'
elsifi=2then
sno002'
else
else'
endif;
dbms_output.put_line(str);
4.2.3case分子
de
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 学习 知识点