oracle认证Word格式.docx
《oracle认证Word格式.docx》由会员分享,可在线阅读,更多相关《oracle认证Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
/
2、了解Sql中别名的集中使用方法,及别名的用处。
对列起别名:
有直接起别名,加AS起别名,用双引号起别名等三种方法
(单引号,引起字符串;
双引号,引起别名。
起别名有符号,或者区分大小写时,必须用双引号)多表查询时,可给表起别名。
(给列起别名,列<
空格>
列别名;
给表起别名,表<
表别名;
)。
如:
Selectfirst_nameEMPLOYEES,12*(salary+100)ASMONEY,manager_id"
ID1"
Froms_empE;
使用别名可以看得出
3、熟练使用SQL语句中的连接符号。
字段的拼接,可用双竖线(双竖线只能用于select语句里)。
不同的DBMS可能使用不同的操作符;
拼接的字段同样可以起别名。
Selectfirst_name||'
'
||last_name||'
'
||title"
Employees"
Froms_emp;
4、高性能函数over、translate、replace、case
Over:
分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
over(orderbysalary)按照salary排序进行累计,orderby是个默认的开窗函数
over(partitionbydeptno)按照部门分区
over(orderbysalaryrangebetween50precedingand150following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150的数据记录
over(orderbysalaryrowsbetween50percedingand150following)前50行,后150行
over(orderbysalaryrowsbetweenunboundedprecedingandunboundedfollowing)所有行
over(orderbysalaryrangebetweenunboundedprecedingandunboundedfollowing)所有行
Translate:
一、语法:
TRANSLATE(string,from_str,to_str)
二、目的
返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string。
TRANSLATE是REPLACE所提供的功能的一个超集。
如果from_str比to_str长,那么在from_str中而不在to_str中的额外字符将从string中被删除,因为它们没有相应的替换字符。
to_str不能为空。
Oracle将空字符串解释为NULL,并且如果
TRANSLATE中的任何参数为NULL,那么结果也是NULL。
我们在利用TRANSLATE取出一个字段中的数字或文字的时候就可以巧用这个函数
selecttranslate('
23456中国3-00=.,45'
'
0123456789'
||'
)fromdual;
如果要取出汉字的话转变一下就可以了
selecttrim(translate('
'
0123456789-=.,'
))fromdual;
replace:
replace(str1,str2,str3)是把str1中的所有str2字符串替换成str3
replace(str1,str2)是把str1中的所有str2字符串去掉,也就是替换成'
'
case:
Decode:
同等于case{if……then……else}
5、日期转换函数to_char,to_number,to_date。
例:
fnumber是字符型,但是查询时使用数字型
select*fromt_lea_waybillwherefnumber=12235572
1、to_date
日期和时间处理:
Oracle日期格式:
DD-MMM-YYYY(D代表日期date,M代表月month,Y代表年year)
如:
SELECTprod_name(DAY表示完整的星期几,DY显示星期的前三个字母)
FROMProducts
WHEREprod_timeBETWEEN
to_date(’01-JAN-2008’)
ANDto_date(’31-DEC-2008’);
日期可以进行加减,默认单位是1天。
日期与日期可以相减,得出天数;
日期与日期但不能相加。
2、to_char
将日期转成特定格式字符串to_char(date,'
日期格式'
)
日期格式要用有效格式,格式大小写敏感'
yyyymmddhh24:
mi:
ss'
(标准日期格式),'
year'
(年的全拼),'
month'
(月的全拼),'
day'
(星期的全拼),'
ddspth'
(日期的全拼)
例:
selectto_char(sysdate,'
)fromdual;
selectto_char(sysdate,'
yearmonthdayddspth'
//大小写敏感
YEARMONTHDAYDDSPTH'
将字符串转成日期to_date('
...'
)
selectto_char(to_date('
20061103'
yyyymmdd'
),'
dd-month-yy'
)fromdual;
-----------------------------------------------------------------------------------------------------------------------------------------------------------、
3、to_number
to_number函数也是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式。
这里简单介绍了to_number的用法并给出了详细的例子。
前面我们在介绍oracle的类型转换函数时介绍到了to_char函数,to_char函数有一个作用是将数值型的值按指定的格式转换为字符串类型的格式。
这里的to_number那是就是将某些固定格式的字符转换为数值类型的值
To_number函数的格式如下:
To_number(varchar2orchar,’formatmodel’)
To_number函数中也有很多预定义的固定格式:
9
代表一个数字
强迫0显示
$
显示美元符号
L
强制显示一个当地的货币符号
.
显示一个小数点
显示一个千位分隔符号
6、连接符、左右连接
内链接:
严格匹配两表的记录。
外链接分左链接和右链接:
会使用一方表中的所有记录去和另一格表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,
数据库会模拟出记录去和那些不匹配的记录匹配。
左链接加号在右面
有TABLE1TABLE2
1的一条记录在2里面没有匹配上,那么1里面的记录保留
2的一条记录在1里面没有匹配上,那么2丢弃
右链接正好相反
--例题:
哪些人是领导。
Oracle特有写法
selectdistinctb.id,b.last_namemanager
froms_empa,s_empb
wherea.manager_id=b.id(+);
左右顺序有区别,这是另外新建一个表,要显示的是第二个表格的内容。
+放在没有匹配行的表一侧,令表格能完整显示出来。
标准写法:
内连接用INNER,左连接用LEFT,右连接用RIGHT。
froms_empaLEFTjoins_empb
ONa.manager_id=b.id;
如果要选取匹配的值丢弃无用的空值,建议哪边数据量少选用哪边的连接。
7、oracle数据库事务隔离级别
隔离级别(isolationlevel)
oracle事务隔离级别定义了事务与事务之间的隔离程度。
oracle事务隔离级别与并发性是互为矛盾的:
隔离程度越高,数据库的并发性越差;
隔离程度越低,数据库的并发性越好。
ANSI/ISOSQL92标准定义了一些数据库操作的隔离级别:
未提交读(readuncommitted)
提交读(readcommitted)
重复读(repeatableread)
序列化(serializable)
通过一些现象,可以反映出隔离级别的效果。
这些现象有:
更新丢失(lostupdate):
当系统允许两个事务同时更新同一数据是,发生更新丢失。
脏读(dirtyread):
当一个事务读取另一个事务尚未提交的修改时,产生脏读。
非重复读(nonrepeatableread):
同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。
(Atransactionrereadsdataithaspreviouslyreadandfindsthatanothercommittedtransactionhasmodifiedordeletedthedata.)
幻像(phantomread):
同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。
(Atransactionreexecutesaqueryreturningasetofrowsthatsatisfiesasearchconditionandfindsthatanothercommittedtransactionhasinsertedadditionalrowsthatsatisfythecondition.)
8、90.5---90.079---79.00
9、merge判断是否有该记录
merge、Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作.MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表
MERGEINTOt_sky_peoplep
USINGt_sky_fpeoplefp
ON(p.fid=fp.fid)
WHENMATCHEDTHEN
UPDATE
SETp.fname=fp.fname,
p.fage=fp.fage;
个人理解有点类似于触发器的功能
10、truncate
truncatetablemyTab;
//删除表myTab中的所有行(截断表),注意:
此操作不可以rollback。
11、列注释了解comment对表和列增加注释的方法。
comment关键字用于对表,字段添加注释,有利于用户对表结构以及数据库对象含义的理解。
select*fromt_sky_peoplecopy;
commentontablet_sky_peoplecopyis'
该表为人员表的copy'
12、查看表约束
select
*
from
user_constraints
a
where
a.table_name='
AAA'
13、掌握建表语句
createtableT_SKY_PEOPLE
(
FIDVARCHAR2(255CHAR)notnull,
VERSIONNUMBER(10)default1notnull,
FNAMEVARCHAR2(255CHAR),
FAGENUMBER(10)
createtablet_sky_peoplecopyasselect*fromt_sky_peoplewherefid>
1;
14、熟练使用触发器,存储过程,job。
1、触发器
:
new--为一个引用最新的列值;
old--为一个引用以前的列值;
这两个变量只有在使用了关键字"
FOREACHROW"
时才存在.且update语句两个都有,而insert只有:
new,select只有:
old;
createorreplacetriggert_sky_people_trigger
beforeinsertont_sky_people
foreachrow
declare
begin
insertintot_sky_peoplecopy(fid,version,fname,fage)
values(:
NEW.fid,:
NEW.version,:
NEW.fname,:
NEW.fage);
end;
2、存储过程
--in传入存储过程的值
CREATEORREPLACEPROCEDURE"
RECORDRECOVERY"
(waybillnumberinvarchar2,
--out存储过程执行后返回的值
retureValueoutnumber)is
--定义一个变量;
类型和t_his_waybill.fid字段相同
billIdt_his_waybill.fid%type;
begin
--将t_his_waybill中查询出来的id放在刚才定义的billId当中去
selectfidintobillIdfromt_his_waybillwherefnumber=waybillnumber;
--恢复运单记录
insertintot_lea_waybill
select*fromt_his_waybillwwherew.fid=billId;
deletefromt_his_waybillwwherew.fid=billId;
commit;
--正常执行返回1
retureValue:
=1;
--异常情况
Exception
--没有查询到数据返回0
whenNO_DATA_FOUNDthen
retureValue:
=0;
--其他异常情况返回2
whenothersthen
=2;
endRECORDRECOVERY;
3、job定时执行的任务
建立一张测试表
createtablet_sky_testjob(skyAdate);
建立需要执行的存储过程
createorreplaceproceduret_sky_testjobprocedureas
insertintot_sky_testjobvalues(sysdate);
end;
建立job定时执行
declare
jobnonumber;
dbms_job.submit(jobno,'
t_sky_testjobprocedure;
trunc(sysdate),'
sysdate+1/1440'
);
相关的几个JOB操作
删除job:
dbms_job.remove(jobno);
修改要执行的操作:
job:
dbms_job.what(jobno,what);
修改下次执行时间:
dbms_job.next_date(job,next_date);
修改间隔时间:
dbms_job.interval(job,interval);
停止job:
dbms_job.broken(:
job1,broken,nextdate);
启动job:
dbms_job.run(jobno);
几个常用的语句
selectto_char(z,'
yymmddhh24:
),bfromzy_table;
selectjob,last_date,last_sec,next_date,next_sec,whatfromdba_jobs;
selectjob,last_date,last_sec,next_date,next_sec,what,failuresfromuser_jobs;
dbms_job.submit(:
job1,'
test;
trunc(SYSDATE)+13.6/24,'
SYSDATE+5/1440'
运行结果: