【文章內(nèi)容簡介】
:2。 轉(zhuǎn)換函數(shù): to_char(d|n[,fmt]):其中d是日期,n是數(shù)字,fmt指定日期或數(shù)字的格式。 示例:select to_char(sysdate,39。yyyy年fmmm月fmdd日 hh24:mi:ss39。) from dual。輸出結(jié)果:2007年9月09日 20:44:27。 select to_char(sysdate,39。yyyy/mm/dd hh24:mi:ss39。) from dual。 select to_char(sysdate,39。yyyymmdd hh24:mi:ss39。) from dual。 select to_char(sysdate,39。yyyy年mm月dd日 hh24時mi分ss秒39。) from dual。 示例:select to_char(sal,39。$9999939。) from emp。輸出結(jié)果:$1600。 to_date(char[,fmt]):此函數(shù)將char或varchar2數(shù)據(jù)類型轉(zhuǎn)換為日期數(shù)據(jù)類型。 示例:select to_date(39。2005120639。,39。yyyymmdd39。) from dual。輸出結(jié)果:0612月05。 select to_date(39。2008/08/10 20:08:0839。,39。yyyy/mm/dd hh24:mi:ss39。) from dual。 select to_date(39。20080810 20:08:0839。,39。yyyy/mm/dd hh24:mi:ss39。) from dual。 select to_date(39。2008年08月10日 20時08分08秒39。,39。yyyy年mm月dd日 hh24時mi分ss秒39。) from dual。 to_number(char):此函數(shù)將包含數(shù)字的字符串轉(zhuǎn)換為number數(shù)據(jù)類型,通常不用這么做,因為Oracle可以對數(shù)字字符串進行隱式轉(zhuǎn)換。 示例:select sqrt(to_number(39。10039。)) from dual。輸出結(jié)果:10。 其它函數(shù): nvl(expression1,expression2):如果expression1為NULL,則nvl返回expression2。 nvl2(expression1,expression2,expression3):如果expression1不是NULL,則nvl2返回expression2,如果expression1是NULL,則返回expression3。 nullif(expr1,expr2):此函數(shù)比較兩個表達式,如果它們相等,則返回空值,否則返回expr1。 nullif函數(shù)等價于以下的case表達式: case when expr1=expr2 then null else expr1 end 分組函數(shù): avg:此函數(shù)返回指定列值的平均值,示例:select avg(sal) from emp。輸出結(jié)果:。 min:此函數(shù)返回指定列值的最小值,示例:select min(sal) from emp。輸出結(jié)果:800。 max:此函數(shù)返回指定列值的最大值,示例:select max(sal) from emp。輸出結(jié)果:5000。 sum:此函數(shù)返回指定列值的總和,示例:select sum(sal) from emp。輸出結(jié)果:29025。 count: 此函數(shù)是為了計算行數(shù),它可以接受3種不同的參數(shù) 示例:select count(*) from emp。輸出結(jié)果:14。 示例:select count(列名) from 表名。 示例:select count(distinct 列名) from 表名。 group by:此子句用于將信息表劃分為組,按組進行聚合運算。select后面跟的列名只能是分組函數(shù)、group by子句中出現(xiàn)的列或表達式。 示例:select deptno,max(sal) from emp group by(deptno)。 查出每個部門的最高工資。 示例:select deptno,count(*),sum(sal) from group by deptno。 //group by主要用來對一組數(shù)進行統(tǒng)計 having: 此子句用來指定group by子句的檢索條件。 示例:select deptno,count(*),sum(sal) from group by deptno having count(*)=5。//having對分組統(tǒng)計再加限制條件 分析函數(shù):只能出現(xiàn)在select列表或order by子句中。 row_number:下面對所有員工的工資進行排名,即使工資相同,其排名也不能相同。 示例:select ename,job,deptno,sal,row_number() over(order by sal desc) as 排名 from 。 下面對所有員工的工資按部門進行排名,即使工資相同,排名也不同。 示例:select ename,job,deptno,sal,row_number() over(partition by deptno order by sal desc) as 排名 from 。 rank:此函數(shù)計算一個值在一組值中的排位,排位是以1開頭的連續(xù)整數(shù),如果兩行的序數(shù)為1,則沒有序數(shù)2,下行的序數(shù)為3。 下面根據(jù)員工的工資和傭金對員工在每個部門中進行排位。相同的工資排位相同,并且排位不連續(xù)。 示例:select ename,sal,m,deptno,rank() over(partition by deptno order by sal desc,m) 排名 from 。 dense_rank:此函數(shù)計算一個行在一組有序行中的排位,排位是以1開頭的連續(xù)整數(shù),具有相同值的排位相同,并且排位是連續(xù)的。 下面首先選擇所有在accounting或research部門中工作的員工的部門名稱、員工姓名和工資, 然后分別計算每個員工的工資在部門中的排位,相等的工次排位相同 示例:select ,dense_rank() over(partition by order by desc) 排名 from emp e,dept d where =。三、鎖和表分區(qū)鎖定是數(shù)據(jù)庫用來控制共享資源并發(fā)訪問的機制。Oracle提供以確保在多用戶環(huán)境下數(shù)據(jù)的完整性和一致性。鎖的兩種級別:(只有在提交或回滾后才能釋放鎖定)(1)行級鎖:是一種排他鎖,防止其他事務(wù)修改此行,但是不會阻止讀取此行的操作。在使用Insert、Update、Delete和Select...For Update等語句時,Oracle會自動應(yīng)用行級鎖定。Select...For Update語法為:Select...For Update [OF column_list] [WAIT n | NOWAIT]其中:OF子句用于指定即將更新的列,即鎖定行上的特定列。WAIT子句指定等待其他用戶釋放鎖的秒數(shù),防止無限期的等待。NOWAIT為不等待。示例1:演示如何鎖定deptno值為10的所有行。select * from dept where deptno=10 for update of dname,loc。(2)表級鎖:將保護表數(shù)據(jù),在事務(wù)處理過程中,表級鎖會限制對整個表的訪問。表級鎖用來限制對表執(zhí)行添加、更新和刪除等修改操作。語法:LOCK TABLE table_name IN lock_mode MODE [NOWAIT]。其中:table_name是要被鎖定的表的名稱。lock_mode是鎖定的模式。表級鎖的模式:行共享(ROW SHARE,RS): 允許其他用戶訪問和鎖定該表,但是禁止排他鎖鎖定整個表。行排他(ROW EXCLUSIVE,RX):與行共享模式相同,同時禁止其他用戶在此表上使用共享鎖。使用Select...For update語句會自動應(yīng)用行排他。共享(SHARE,S):共享鎖將鎖定表,僅允許其他用戶查詢表中的行,但不允許插入、更新或刪除行。多個用戶可以同時在同一張表中放置共享鎖即允許資源共享。但是這樣極容易造成死鎖。共享行排他(SHARE ROW EXCLUSIVE,SRX): 執(zhí)行比共享表鎖更多的限制。防止其他事務(wù)在表上應(yīng)用共享鎖、共享行排他鎖以及排他鎖。排他(EXCLUSIVE,X): 對表執(zhí)行最大限制。除了允許其他用戶查詢該表的記錄,排他鎖防止其他事務(wù)對表做任何更改或在表上應(yīng)用任何類型的鎖。示例2:演示如何以共享模式鎖定表。lock table dept in share mode nowait。表分區(qū)的優(yōu)點:改善表的查詢性能。表更容易管理。便于備份和恢復。提高數(shù)據(jù)安全性。注意:要分區(qū)的表不能具有Long和Long Raw數(shù)據(jù)類型的列。四種分區(qū)方法:范圍分區(qū):根據(jù)表的某個列或一組列的值范圍,決定將該數(shù)據(jù)存儲在哪個分區(qū)上。語法如下:在Create Table語句后增加PARTITION BY RANGE(column_name)(PARTITION part1 VALUE LESS THAN (range1) [TABLESPACE tbs1],PARTITION part2 VALUE LESS THAN (range2) [TABLESPACE tbs2],....PARTITION partN VALUE LESS THAN