Oracle實(shí)驗(yàn)總結(jié)
Oracle實(shí)驗(yàn)總結(jié)
近日做了基于ORACLE的數(shù)據(jù)庫(kù)安全、對(duì)象sql數(shù)據(jù)庫(kù),XML數(shù)據(jù)庫(kù)的實(shí)驗(yàn),其中遇到很多問(wèn)題,先總結(jié)如下。
1、安裝Oracle的過(guò)程中可以‘選擇建立數(shù)據(jù)庫(kù)’,也可以選擇‘只安裝軟件’,后者可在安裝好軟件后,建立數(shù)據(jù)庫(kù),可參考網(wǎng)上的很多安裝步驟。2、Oracle的默認(rèn)用戶有sys和system,在命令行或者sQl*plus中登陸時(shí),寫法如下:
Connectsys/123456assysdba;其中123456是密碼,在創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)置的。
普通用戶登錄,connectzhangsan/123456;
3、grantselect不支持對(duì)表中選定的幾列授權(quán),只能將整個(gè)表的select權(quán)限授權(quán)出去。所以實(shí)驗(yàn)中先建立了基于選課信息表的視圖SelectiveInfo1,視圖中包含成績(jī)列,學(xué)號(hào)列以及班級(jí)列(不包含其他的列),再將對(duì)視圖SelectiveInfo1的select權(quán)限授予角色teacher。
4、創(chuàng)建用戶的時(shí)候,一定要說(shuō)明該用戶對(duì)表空間的權(quán)限即(quotaunlimitedontablespace或者具體限定大小的句子),否則該用戶即使被授予了建表權(quán)限,也不能建表。
創(chuàng)建用戶的時(shí)候必須給用戶授予createsession的權(quán)限,這是最基本的權(quán)限。5、不同的用戶可以創(chuàng)建相同的表格,例如,teacher用戶創(chuàng)建了table1,student用戶也創(chuàng)建了table1,且這兩個(gè)表格式完全相同的,那么其他用戶需要用這兩個(gè)表格時(shí),可以用teacher.table1和student.table1加以區(qū)分。系統(tǒng)用戶創(chuàng)建的表,和用戶自己創(chuàng)建的表,本用戶引用是可不加前綴。6、oracle有自帶的密碼驗(yàn)證函數(shù),默認(rèn)情況下是不啟用的,可以用下面的語(yǔ)句啟用,注意必須以Connectsys/123456assysdba的身份登陸(其他DBA身份的用戶可不可以,本人沒有試過(guò))才能啟用密碼函數(shù),啟用方式如下
7、將日期裝換為字符串可以to_char()函數(shù),將字符串轉(zhuǎn)換為日期用to_date()函數(shù)。網(wǎng)上有很多這兩個(gè)函數(shù)的資料。
8、Xml數(shù)據(jù)庫(kù)使用的簡(jiǎn)單舉例(具體路勁寫法好像不對(duì),只要將改改‘//’為‘/’并把路徑寫全就可以了,路徑的用法其實(shí)是xpath技術(shù))
建立含xmltype數(shù)據(jù)的表
createtableabc(idnumber,xmldocsys.xmltype);
向表中插入數(shù)據(jù)
insertintoabc(id,xmldoc)values(1,
sys.xmlType.createXML(""
abc""));
查詢表中的數(shù)據(jù):
得到id=1的value變臉的值select
i.xmldoc.extract(""http://name/a[@id=1]/@value"").getStringVal()asennames,id
fromabci
得到a節(jié)點(diǎn)的值
selectid,i.xmldoc.extract("/name/a/text()").getStringVal()astruename
fromabci
得到節(jié)點(diǎn)id屬性的值
Selecthd.Data_t.extract(""/root/name/@id"").getStringVal()AsName
FROMsehr_house_datahd
擴(kuò)展閱讀:ORACLE實(shí)訓(xùn)總結(jié)
1、Conn/assysdba:
以sysdba連接數(shù)據(jù)庫(kù),在這里可以解鎖system、hr(oracle內(nèi)建的用戶名)、scott(oracle內(nèi)建的用戶名)用戶,并修改它們的密碼。2、修改密碼:
Alteruseridentifiedby3、解鎖用戶:
Alteruseraccountunlock
4、解鎖hr、scott,并修改system、hr、scott密碼Alteruserhraccountunlock;Alteruserscottaccountunlock;Alteruserhridentifiedbyk;Alteruserscottidentifiedbyk;Alterusersystemidentifiedbyk;5、連接網(wǎng)絡(luò)數(shù)據(jù)庫(kù)
在\\product\\10.0.2\\db_1\\NETWORK\\ADMIN\\tnsname.ora文件中添加內(nèi)容:test=(
DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))
連接數(shù)據(jù)庫(kù)時(shí),輸入:conn/@test6、創(chuàng)建用戶的語(yǔ)句以創(chuàng)建用戶名hr為例:Connsystem/assysdba;//連接到指定數(shù)據(jù)庫(kù)Dropuserhrcascade;//如果hr用戶名已存在的話刪除該用戶名
Createuserhridentifiedbyhrdefaulttablespaceuserstemporarytablespacetemp;//創(chuàng)建用戶hr
Hostimphr/hrfile=\\hr.dmplog=\\1.logfromuser=hrtouser=hrignore=y;7、hr環(huán)境搭建
connhr/k:以用戶名hr、密碼k連接數(shù)據(jù)庫(kù)createtableEMP(EMPNONUMBER(6)notnull,ENAMEVARCHAR2(25),HIREDATEDATE,JOBVARCHAR2(10),SALNUMBER(8,2),COMMNUMBER(2,2),DEPTNONUMBER(4)
);INSERTINTOEMPSELECT
EMPLOYEE_ID,LAST_NAME,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,DEPARTMENT_IDFROMEMPLOYEES;createtableDEPT(DEPTNONUMBER(4)notnull,DNAMEVARCHAR2(30),LOCNUMBER(4)
);INSERTINTODEPT
SELECTDEPARTMENT_ID,DEPARTMENT_NAME,LOCATION_IDFROMDEPARTMENTS;
createtableemp_jobasselectempno,jobfromempwhere1=2;
insertintoemp_job(empno,job)selectempno,jobfromempwheredeptno=30;createtablenew_emp(id,name)asselectempno,enamefromemp;createtableSALGRADES(grade_levelvarchar2(4),lowest_salaryNUMBER,highest_salaryNUMBER
);insertintosalgradesvalues("L1",1000,2999);insertintosalgradesvalues("L2",3000,5999);insertintosalgradesvalues("L3",6000,8999);insertintosalgradesvalues("L4",9000,14999);insertintosalgradesvalues("L5",15000,22999);insertintosalgradesvalues("L6",23000,30000);commit;
8、SQL語(yǔ)句的分類DQL:dataquerylanguage數(shù)據(jù)查詢語(yǔ)言:selectDML:datamanipulationlanguage數(shù)據(jù)操作語(yǔ)言insert/update/delete/mergeDDL:datedefinitionlanguage數(shù)據(jù)定義語(yǔ)言create/alter/drop/truncateDCL:datecontrollanguage數(shù)據(jù)控制語(yǔ)言grant/revokeTCL:transitoncontrollanguage事務(wù)控制語(yǔ)言commit/rollback/savepoint9、NULL:它不等于零或空格,任意的類型都可以支持nulla)包含null的任何算術(shù)表達(dá)式的結(jié)果都為nullb)包含null的連接表達(dá)式等于與””(空字符串)連接10、列別明的兩種書寫形式a)列名列別名b)列名as列別名
11、列別名必須加””的情況a)列別名中包含有空格b)列別名中要求區(qū)分大小寫c)列別名中包含有特殊字符12、使用||連接符代替,實(shí)例:Selectfirst_name||||last_name||sphonenumberis||phone_number“employeePhonenumber”fromemployees;
其中first_name、last_name、phone_number位列變量,表示輸出空格,中前兩個(gè)表示輸出,sphonenumberis表示輸出sphonenumber,”employeePhonenumber”表示輸出列的別名。
13、SQL*PLUS/ISQL*PLUS命令a)desc:顯示表結(jié)構(gòu),其中desc是describe的縮寫,可以寫全。b)set[系統(tǒng)變量]on|off,例如:setheadingon|off:控制是否顯示列標(biāo)題。setescapeon|off:控制是否打開轉(zhuǎn)義符,showescape:顯示轉(zhuǎn)義字符setautocommiton|off:空值是否打開自動(dòng)提交,showautocommit:顯示當(dāng)前提交方式14、ISQL*PLUS的默認(rèn)顯示格式Date和Character型左對(duì)齊,Numeric型右對(duì)齊、列標(biāo)題居中大寫字符函數(shù):其中字符串可以代表列名或字符表達(dá)式
a)lower(字符串)將所有大寫字符轉(zhuǎn)換為小寫字符b)upper(字符串)將所有小寫字符轉(zhuǎn)換為大寫字符
c)iniicap(字符串)所有單詞的首字母大寫,其它的小寫d)concat(字符串1,字符串2)將字符串1與字符串2連接
e)substr(字符串,m,n)從字符串中第m位開始截取n位,字符串從1開始計(jì)數(shù)f)length(字符串)返回字符串的長(zhǎng)度
g)instr(字符串1,字符串2,m,n)返回字符串2在字符串1中,從第m位開始,第n次出
現(xiàn)的位置。
h)lpad(字符串1,n,字符串2)用字符串2在字符串1的左邊進(jìn)行填充,使字符串1達(dá)到
n位
i)rpad(字符串1,n,字符串2)用字符串2在字符串1的右邊進(jìn)行填充,使字符串1達(dá)到
n位
j)trim(leading|trailing|both字符from字符串)將字符串中開頭(leading)和結(jié)尾(trailing)
的指定字符(只能是字符)去掉。
k)replace(字符串1,字符串2,字符串3)將字符串1中的字符串2用字符串3替換。數(shù)字函數(shù)
a)round(數(shù)字,n)將數(shù)字四舍五入到小數(shù)點(diǎn)后n位,n為負(fù)數(shù)表示小數(shù)點(diǎn)前|n|位。b)trunc(數(shù)字,n)將數(shù)字截取到小數(shù)點(diǎn)后n位,其他同上。c)mod(m,n)取m除以n的余數(shù)日期函數(shù)
a)sysdate返回當(dāng)前系統(tǒng)日期,不能寫成sysdate()
b)months_between(date1,date2)返回date1與date2之間的月數(shù)c)add_months(date,n)在date的基礎(chǔ)上增加n個(gè)月d)next_day(date,d)返回date之后的第一個(gè)指定d,例如:next_day(16-8月-11,星期一),
返回11年8月16日之后的第一個(gè)星期一是:22-8月-11
e)last_day(date)返回date所在月的最后一天,例如:last_day(16-8月-11)返回:31-8
月-11
f)round(date,fmt)將date按fmt格式四舍五入,fmt可選默認(rèn)為DD
g)trunc(date,fmt)將date按fmt格式四舍五入,fmt可選默認(rèn)為DD,時(shí)間提前h)extract(XXfromdate)從date中提取出XX(month、day、year)數(shù)據(jù)類型之間的轉(zhuǎn)換
a)to_char(date|number,fmt)將date或number轉(zhuǎn)換為指定格式fmt的字符串,fmt可省
略b)to_number(char,fmt)將char轉(zhuǎn)換為指定格式fmt數(shù)字,fmt可省略c)to_date(char,fmt)將char轉(zhuǎn)換為指定格式fmtdate,fmt可省略常用的日期格式
a)yyyy:四位數(shù)字的年份b)yy:兩位數(shù)字的年份c)year:年份的英文拼寫d)mm:兩位數(shù)字的月份e)month:月份的英文拼寫f)dy:星期英文的前三位g)day:星期英文的全拼h)d:星期的第幾天,星期日為第一天i)dd:一個(gè)月中的第幾天j)ddd:一年中的第幾天k)am或pm:上下午
l)hh或hh12或hh24:表示小時(shí)12小時(shí)制24小時(shí)制m)mi:表示分鐘n)ss:表示秒數(shù)字格式a)9:一位數(shù)字b)0:一位數(shù)字或前導(dǎo)零c)$:美元符號(hào)d)L:按照地區(qū)顯示貨幣符號(hào)e).:小數(shù)點(diǎn)f),千位分隔符其它函數(shù)
a)nvl(表達(dá)式1,表達(dá)式2):如果表達(dá)式1的值不為null,返回表達(dá)式1的值,否則返回
表達(dá)式2的值,數(shù)據(jù)格式可以是日期、字符、數(shù)字,但表達(dá)式1和表達(dá)式2的數(shù)據(jù)類型必須一致。
b)nvl2(表達(dá)式1,表達(dá)式2,表達(dá)式3):如果表達(dá)式1的值不為空,返回表達(dá)式2的值,
否則返回表達(dá)式3的值。表達(dá)式2和表達(dá)式3的數(shù)據(jù)類型必須相同。
c)nullif(表達(dá)式1,表達(dá)式2):如果兩個(gè)參數(shù)不相等,返回表達(dá)式1的值;相等,則返回
空值。
d)coalesce(x1,x2……xn):返回第一個(gè)非空的參數(shù)。
e)(case表達(dá)式1when條件1then結(jié)果1when條件2then結(jié)果2……else結(jié)果nend):如
果表達(dá)式為條件1匹配就返回結(jié)果1……最后默認(rèn)返回else后的結(jié)果n。
f)Decode(表達(dá)式,條件1,結(jié)果1,條件2,結(jié)果2……缺省值):如果表達(dá)式與條件1
匹配則返回結(jié)果1,缺省返回缺省值。
表別名如果定義了表別名,那么之后只能使用表別名而不能使用原表名。連接語(yǔ)法
Select……fromtable1[crossjointable2]|[naturaljointable2]|
[jointable2using(column_name)]|
[jointable2on(table1.column_name=table2.column_name)]|
[left|right|fullouterjointable2on(table1.column_name=table2.column_name)]a)crossjointable2:生成笛卡爾積b)nutualjointable2:自然連接
c)jointable2using(column_name):使用指定列連接,兩列同名
d)jointable2on(table1.column_name=table2.column_name):使用指定列連接,兩列可以
不同名
e)left|right|fullouterjointable2on(table1.column_name=table2.column_name):外連接union和unionall
a)union和unionall連接的兩個(gè)結(jié)果集所包含的字段要相等。b)union的結(jié)果去掉重復(fù)的記錄,unionall不去掉重復(fù)的記錄。Groupby的特點(diǎn)
a)在groupby子句的列可以不在select語(yǔ)句中出現(xiàn),但在select字句中出現(xiàn)的非分組
列必須在groupby字句中出現(xiàn)b)Groupby后面可以有多列
Select語(yǔ)句的執(zhí)行過(guò)程:順序?yàn)閒rom-where-groupby-having-select-orderby
a)from:從from子句中找到需要查詢的表b)where:進(jìn)行非分組函數(shù)的篩選判斷c)groupby:完成分組操作
d)having:完成分組函數(shù)的篩選判斷
e)select:選擇要顯示的列或表達(dá)式或組函數(shù)f)orderby:對(duì)得到的結(jié)果集進(jìn)行排序組函數(shù)的嵌套:最多為兩級(jí),例如:Selectmax(count(employee_id))fromemployeesgroupbydepartment_id;子查詢
特點(diǎn):a)子查詢只能在括號(hào)中
b)子查詢需要寫在運(yùn)算符右邊
c)子查詢可以寫在where、having、from中。
分類:a)單行子查詢:用=、>=、=等連接,子查詢返回結(jié)果只有一條
b)多行子查詢:用any、all、in等連接,子查詢的返回結(jié)果只有一條c)多列子查詢:子查詢的返回結(jié)果中含有多列。例如:
selecte.last_namee.salary,e.job_id,j.avgsalfromemployeese,(selectjob_id,avg(salary)avgsalfromemployeesgroupbyjob_id)jwheree.job_id=j.job_idande.salary>j.avgsal
子查詢中的空值問(wèn)題
示例:selecta.last_name,a.salaryfromemployeesawherea.employee_idnotin(selectb.manager_idfromemployeesb)的返回結(jié)果為空
原因:在employees表中有manager_id為null的記錄,而null&&true=trueExists和notexists
a)子查詢中如果找到符合條件的記錄,子查詢語(yǔ)句不會(huì)繼續(xù)執(zhí)行,返回trueb)子查詢中如果到表的末尾也沒有找到符合條件的記錄,返回falseInsert插入空值插入空值時(shí),可以寫null或使用默認(rèn)值修改示例:updatedossiersetcountry_code=defaultwhereid=2創(chuàng)建表的語(yǔ)法
Createtabletable_name[(column,column……)]asselect……:對(duì)于select中的表達(dá)式(比如:salary*12)必須給定列別名,否則報(bào)錯(cuò)。引用另一個(gè)用戶的表用戶名.表名Oracle中表的分類
a)用戶表:有用戶創(chuàng)建和維護(hù)的表的集合,它包括用戶所使用的數(shù)據(jù)
b)數(shù)據(jù)字典:由Oracle服務(wù)器創(chuàng)建和維護(hù)的表的集合,它包括數(shù)據(jù)庫(kù)信息,比如表的
定義、數(shù)據(jù)庫(kù)結(jié)構(gòu)信息等。
Oracle數(shù)據(jù)庫(kù)的偽列和偽表
偽表:dual用于查詢不涉及具體表時(shí)偽列:rowin由系統(tǒng)自動(dòng)產(chǎn)生,表示行地址添加、修改、刪除列
a)添加:altertabletable_nameadd(columnname,datatypenotnulldefault……)b)修改:altertabletable_namemodify(columnname,datatypenotnulldefault……)c)刪除:altertabletable_namedrop(columnname1,columnname2)重命名表名
語(yǔ)法:renameoldnametonewname
友情提示:本文中關(guān)于《Oracle實(shí)驗(yàn)總結(jié)》給出的范例僅供您參考拓展思維使用,Oracle實(shí)驗(yàn)總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。