第一篇:ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗總結(jié)
ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗總結(jié)
----ORACLE數(shù)據(jù)庫作為大型數(shù)據(jù)庫管理系統(tǒng),近年來一直占有世界上高端數(shù)據(jù)庫的最大 份額,其強(qiáng)大而完善的數(shù)據(jù)庫管理功能,以及ORACLE公司推陳出新的不斷努力,一直成 為IT業(yè)界矚目的焦點。嶺澳核電站的數(shù)據(jù)庫平臺采用了ORACLE7.3作為后端平臺,前端選 擇了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作為開發(fā)工具,采用了目前流行的
CLIENT/SERVER模式。本人在ORACLE系統(tǒng)的開發(fā)中,就ORACLE的整套開發(fā)工具提出一些自
己的體會,供同行參考。
----一.ORACLE SQL PLUS 使用技巧:----①查找重復(fù)記錄:
SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----執(zhí)行上述SQL語句后就可以顯示所有DRAWING和DSNO相同且重復(fù)的記錄。----刪除重復(fù)記錄:
DELETE FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----執(zhí)行上述SQL語句后就可以刪除所有DRAWING和DSNO相同且重復(fù)的記錄。----② 快速編譯所有視圖
----當(dāng)在把數(shù)據(jù)庫倒入到新的服務(wù)器上后(數(shù)據(jù)庫重建),需要將視圖重新編譯一遍,因 為該表空間視圖到其它表空間的表的連接會出現(xiàn)問題,可以利用PL/SQL的語言特性,快 速編譯。
SQL >SPOOL ON.SQL SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
COMPILE;’ FROM TAB;SQL >SPOOL OFF 然后執(zhí)行ON.SQL即可。
SQL >@ON.SQL 當(dāng)然,授權(quán)和創(chuàng)建同義詞也可以快速進(jìn)行,如:
SQL >SELECT ‘GRANT SELECT ON ’ ||TNAME||’ TO USERNAME;’ FROM TAB;SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;③ 用外聯(lián)接提高表連接的查詢速度
在作表連接(常用于視圖)時,常使用以下方法來查詢數(shù)據(jù): SELECT PAY_NO, PROJECT_NAME FROM A WHERE A.PAY_NO NOT IN(SELECT PAY_ NO FROM B WHERE VALUE >=120000);----但是若表A有10000條記錄,表B有10000條記錄,則要用掉30分鐘才能查完,主要因 為NOT IN要進(jìn)行一條一條的比較,共需要10000*10000次比較后,才能得到結(jié)果。該用外
聯(lián)接后,可以縮短到1分左右的時間: SELECT PAY_NO,PROJECT_NAME FROM A,B WHERE A.PAY_NO=B.PAY_NO(+)AND B.PAY_NO IS NULL AND B.VALUE >=12000;----④ 怎樣讀寫文本型操作系統(tǒng)文件
----在PL/SQL 3.3以上的版本中,UTL_FILE包允許用戶通過PL/SQL讀寫操作系統(tǒng)文件。如下: DECALRE FILE_HANDLE UTL_FILE.FILE_TYPE;BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(‘C:’,’TEST.TXT’,’A’);
UTL_FILE.PUT_LINE(FILE_HANDLE,’ HELLO,IT’S A TEST TXT FILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;----相關(guān)UTL_FILE數(shù)據(jù)庫包詳細(xì)信息可以參見相關(guān)資料。----⑤ 怎樣在數(shù)據(jù)庫觸發(fā)器中使用列的新值與舊值
----在數(shù)據(jù)庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改 前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_ NO,:NEW.DEPT_NO。
----二.ORACLE DEVELOPER 2000使用技巧:
----① 改變FORM(FMX模塊)運(yùn)行時的Runform4.5的題頭:
----DEVELOPER2000中FMX默認(rèn)題頭為:Developer/2000 Forms Runtime for Windows
/ NT 你可以改為自己定義的標(biāo)題,----1.在Form級觸發(fā)器中添加觸發(fā)WHEN-NEW-FORM-INSTANCE----2.在此觸發(fā)器中寫如下代碼:
set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT SYSTEM 歡迎使用');----② 如何隱藏菜單中的window選項:
----在創(chuàng)建自己的菜單時,最后選項總有window項,下面介紹如何去掉它,----1.創(chuàng)建一個Menu
----2.在Menu中建立一個Item,命名為WINDOW。----3.設(shè)置該Item屬性如下:----
Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:為空
----③ 怎樣創(chuàng)建動態(tài)下拉列表List
----Developer 2000 中的列表是通過設(shè)置相關(guān)屬性而完成數(shù)據(jù)項的列表設(shè)置的,但那
只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手 去編個小程序。下面詳細(xì)介紹怎樣去做:----有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當(dāng)一進(jìn)入該模塊時,就將
SPECIFICATION項在數(shù)據(jù)庫中存儲的值動態(tài)顯示出來,先在Form4.5中建立一個PRCEDURE,命名為DYN_LIST: PROCEDURE DYN_LIST IS
CURSOR C1 IS
SELECT DISTINCT(SPECIFICATION)FROM EBOP_CABLE_ACCOUNT;CNT NUMBER;i NUMBER;TNAME EBOP_CABLE_ ACCOUNT.SPECIFICATION%TYPE;BEGIN
CLEAR_LIST('EBOP_CABLE_ ACCOUNT.SPECIFICATION');SELECT COUNT(DISTINCT
(SPECIFICATION))INTO CNT FROM EBOP _CABLE_ACCOUNT;open C1;FOR i IN 1..CNT LOOP
FETCH C1 INTO TNAME;EXIT WHEN C1%NOTFOUND OR C1%NOTFOUND IS NULL;ADD_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',i,TNAME,TNAME);END LOOP;DELETE_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);CLOSE C1;END;然后在FORM的WHEN-NEW
-FORM-INSTANCE觸發(fā)子中加入一行: DYN_LIST;----這樣一進(jìn)入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數(shù)據(jù)項改為列 表項。
----④ 當(dāng)顯示多條記錄且數(shù)據(jù)項特別多時,如何組織錄入及顯示界面:----如上圖所示,PRN代碼及設(shè)備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(ST ACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或 敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項特別多又想顯示多條記錄 時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后
建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設(shè)備代 碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選
為畫布2(STACK型),然后調(diào)整整體位置就可以了。----⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)
----在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當(dāng)你在該觸發(fā)子中使用了UPDA
TE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務(wù)器端建立D B_SQL_COMMIT這個過程(采用ORACLE7.3數(shù)據(jù)庫),PROCEDURE DB_SQL_COMMIT IS source_cursor integer;ignore integer;V7 NUMBER :=2;BEGIN
source_cursor:=dbms_sql.open_cursor;dbms_sql.parse(source_cursor,'COMMIT WORK',V7);ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;----然后在FORM中該觸發(fā)子中調(diào)用過程DB_SQL_COMMIT;就可以了,當(dāng)然你可以根據(jù)自己
需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權(quán)限。----⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作
----設(shè)塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE-REC
ORD,加入如下代碼:
:VO_ID:=:System.Trigger_Record;----這樣每當(dāng)生成新記錄時VO_ID就會自動加一了。
----⑦ 如何在一個FORM中調(diào)用另一個FORM,或在一個塊中調(diào)用另一個塊時顯示特定的 記錄有時用戶會要求在調(diào)用另一個FORM時,只顯示相關(guān)的記錄,舉例如下,在一個FORM 的塊中有一個按鈕,在按鈕觸發(fā)子中加入如下代碼: DECLARE PM PARAMLIST;BEGIN
PM:=GET_PARAMETER_LIST('PM');IF NOT ID_NULL(PM)THEN
DESTROY_PARAMETER_LIST('PM');END IF;PM:=CREATE_PARAMETER_LIST('PM');......................ADD_PARAMETER(PM,'THE_WHERE', TEXT_PARAMETER,'EM_NAME=''EM4'' AND EM_PROJECT_NAME=''支架預(yù)制''');OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);END;
----其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調(diào)用的FORM 模塊。這樣通過傳遞參數(shù)列表就可以得到想要的結(jié)果。在FORM PAYMENT.FMB中,建立一 參數(shù)THE_WHERE,CHAR型,長1000,然后在PAYMENT.FMB中建立FORM級觸發(fā)子WHEN-NEW-F ORM-INSTANCE,在該觸發(fā)子中加入以下語句:
IF :PARAMETER.THE_WHERE IS NOT NULL THEN SET_BLOCK_PROPERTY('PAYMENT', DEFAULT_WHERE,:PARAMETER.THE_WHERE);END IF;----其中PAYMENT為要顯示的塊,這樣通過參數(shù)傳遞就得到想要的某些特定條件的數(shù)據(jù) 了。
----⑧ 在FORM中當(dāng)有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:
----每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導(dǎo)航到主塊輸下一條記錄,F(xiàn)ORM就會提示你是否要保存記錄,而你并不希望FORM提示,讓它自動保存,此時你可 以到Program Units中找到過程PROCEDURE Clear_All_Master_Details,然后在這個過程 中找到語句
Clear_Block(ASK_COMMIT);----將其改為Clear_Block(DO_COMMIT);就可以了。----⑨ 在Report開始時選擇排序項:
----在報表開始的Parameter Form中選擇報表按哪個數(shù)據(jù)項排序,----1.先在USER PARAMETER 中創(chuàng)建SORT參數(shù),為字符型,長20。
----2.初始值選’責(zé)任方’,然后將這四個值輸入到DATA SELECTION中,形成列表。----3.然后處理QUERY中的SQL語句: select CHARGER,FCO_NO,EM_NAME,FCO _NO,DESCRIPTION, FCR_POINT from FCR_MAIN ORDER BY DECODE(:SORT,'責(zé)任方',CHARGER,'FCO號', FCO_NO,'FCR號',FCR_NO,'FCR號',EM_NAME)----⑩ 在Developer 2000中如何讀寫操作系統(tǒng)文件
----在用Developer 2000的開發(fā)工具開發(fā)應(yīng)用程序時,經(jīng)常碰到需要讀寫外部文件的問
題,可以用ORACLE 帶的包TEXT_IO來完成這項需求。例如: DECLARE
IN_FILE TEXT_IO.FILE_TYPE;OUT_FILE TEXT_IO.FILE_TYPE;LINE_BUFER VARCHAR2(80);/*若不用IN_FILE,可以將各字段聯(lián)接在一起賦值給此變量*/
BEGIN
IN_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST1.TXT’,’r’);OUT_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST2.TXT’,’w+’);
LOOP
TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);TEXT_IO.PUT(LINE_BUFER);TEXT_IO.NEW_LINE;TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);END LOOP;EXCEPTION
WHEN no_data_found THEN
TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;----三.數(shù)據(jù)庫管理
----① 在刪除一個表中的全部數(shù)據(jù)時,須使用TRUNCATE TABLE 表名;因為用DROP TAB
LE,DELETE * FROM 表名時,TABLESPACE表空間該表的占用空間并未釋放,反復(fù)幾次DR OP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。----② 數(shù)據(jù)庫文件的移動方法
----當(dāng)想將數(shù)據(jù)庫文件移動到另外一個目錄下時,可以用ALTER DATABASE命令來移動(比ALTER TABLESPACE適用性強(qiáng)):
----1.使用SERVER MANAGER關(guān)閉實例.SVRMGR > connect internal;SVRMGR > shutdown;SVRMGR >exit;----2.使用操作系統(tǒng)命令來移動數(shù)據(jù)庫文件位置(假設(shè)這里操作系統(tǒng)為SOLARIS 2.6).在UNIX中用 mv命令可以把文件移動到新的位置,#mv /ora13/orarun/document.dbf /ora12/orarun----3.裝載數(shù)據(jù)庫并用alter database命令來改變數(shù)據(jù)庫中的文件名.SVRMGR > connect internal;SVRMGR > startup mount RUN73;SVRMGR > alter database rename file
> ‘/ ora13/orarun/document.dbf’
> ‘/ ora12/orarun/document.dbf’;----4.啟動實例.SVRMGR > alter database open;----ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗總結(jié)
第二篇:Oracle數(shù)據(jù)庫學(xué)習(xí)中的六條經(jīng)驗總結(jié)
Oracle數(shù)據(jù)庫學(xué)習(xí)中的六條經(jīng)驗總結(jié)
以下的文章主要是介紹在Oracle數(shù)據(jù)庫學(xué)習(xí)中的六條經(jīng)驗總結(jié),其實想學(xué)好Oracle數(shù)據(jù)庫并不是一件很困難的事情,很多人都認(rèn)為Oracle數(shù)據(jù)庫的體系過于龐大,在學(xué)習(xí)的過程中摸不到頭緒,以下的文章就會給你提供相關(guān)的解答方法。
1、如果有一定的數(shù)據(jù)庫基礎(chǔ)知道SQL是怎么回事,即使寫不出來簡單的SQL,但可以看動它們,你就可以跳到2。否則請先看一下數(shù)據(jù)庫基礎(chǔ)和SQL語言,不需要很深,更不需要去記憶那些復(fù)雜的SQL命令,這些可以留在以后邊應(yīng)用邊學(xué)習(xí)、記憶。
2、要想學(xué)好Oracle數(shù)據(jù)庫,首先要學(xué)習(xí)ORACLE的體系結(jié)構(gòu),現(xiàn)在你不需要深入理解它們,但要分清幾個關(guān)鍵的概念:instance&database, memory structure,process&those files,such as data file, control file,init parameter file etc以及database ,tablespace,data file和tablespace,segmnet,extent & block它們之間的關(guān)系。
當(dāng)然還要分清undo tablespace & redo log file等,對于很多初學(xué)者來說,能夠?qū)@些概念有個較為清晰的認(rèn)識并不是一件容易的事,而這些并非Oracle的全部。
3、是有關(guān)ORACLE的一些基本概念,下面要學(xué)習(xí)的是一些簡單的的實際操作,就是如何去管理ORACLE數(shù)據(jù)庫,當(dāng)然不是管理全部的ORACLE。在此過程中你將對SQL和ORACLE體系結(jié)構(gòu)有個更深入的了解。
4、到了這一步你基本上算是初步掌握了ORACLE,下面將要根據(jù)你的方向來具體學(xué)習(xí)其它的ORACLE知識了。如果你是開發(fā)人員,則需要更多地去學(xué)習(xí)PL/SQL以及DEVELOPER,而這將是一門新的課程。如果你是一名DBA,請繼續(xù)。
5、現(xiàn)在你可以根據(jù)自己的實際情況,進(jìn)行有選擇的學(xué)習(xí),也就是說下面的內(nèi)容沒有特別順序要求。可以選擇深入學(xué)習(xí)ORACLE數(shù)據(jù)庫的管理、備份與恢復(fù)、性能調(diào)整、網(wǎng)絡(luò)等。當(dāng)然在學(xué)習(xí)這些知識的過程中,如果有實際的工作更好,這樣你可以在實際中成長,學(xué)會TROUBLE SHOOTING。
6、當(dāng)然在學(xué)習(xí)的過程中,你可以在網(wǎng)站或論壇中與他人進(jìn)行交流,可以看別人的一些經(jīng)驗文章,也可以自己寫一些心得體會。技術(shù)進(jìn)步的本身就是經(jīng)驗的積累和提煉過程,希望大家共同成長,歡迎大家相互交流。
第三篇:Oracle數(shù)據(jù)庫實驗報告
中南林業(yè)科技大學(xué)
實驗報告
課程名稱:
Oracle數(shù)據(jù)庫 專業(yè)班級: 姓名:
學(xué)號:
****年**月**日
實驗一
安裝和使用Oracle數(shù)據(jù)庫
【實驗?zāi)康摹?/p>
1.掌握Oracle軟件安裝過程,選擇安裝組件 2.掌握建立Oracle數(shù)據(jù)庫,配置網(wǎng)絡(luò)連接 3.掌握Oracle企業(yè)管理器的基本操作 4.使用SQL*Plus,登錄到實例和數(shù)據(jù)庫 5.掌握命令方式的關(guān)閉和啟動實例及數(shù)據(jù)庫 【實驗內(nèi)容】
1.查看已安裝的Oracle組件
2.查看服務(wù),記錄下和數(shù)據(jù)庫有關(guān)的服務(wù)名,將他們設(shè)為手動方式,啟動相關(guān)服務(wù)。
3.配置監(jiān)聽器,查看是否在服務(wù)中有LISTENER,是否能啟動。4.配置本地net服務(wù),提示:設(shè)置正確的服務(wù)器地址和端口號。5.打開SQL*Plus,用SYS和SYSTEM用戶名和密碼登錄。6.思考題:有幾種打開SQL*Plus的方法?分別是什么? 7.用命令關(guān)閉實例和數(shù)據(jù)庫,記錄命令
8.用命令以NOMOUNT的方式啟動實例,再加載數(shù)據(jù)庫,打開數(shù)據(jù)庫。
【實驗結(jié)論】
1.查看已安裝的Oracle組件
2.查看服務(wù),記錄下和數(shù)據(jù)庫有關(guān)的服務(wù)名,將他們設(shè)為手動方式,啟動相關(guān)服務(wù)。
3.配置監(jiān)聽器,查看是否在服務(wù)中有LISTENER,是否能啟動。
4.配置本地net服務(wù),提示:設(shè)置正確的服務(wù)器地址和端口號。
5.打開SQL*Plus,用SYS和SYSTEM用戶名和密碼登錄。
6.思考題:有幾種打開SQL*Plus的方法?分別是什么?(1)直接打開 sql plus 即窗口方式(2)cmd 命令行方式
(3)WEB 頁面中 iSQL*Plus 方式 7.用命令關(guān)閉實例和數(shù)據(jù)庫,記錄命令 SQL>shutdown immediate
8.用命令以NOMOUNT的方式啟動實例,再加載數(shù)據(jù)庫,打開數(shù)據(jù)庫。
sql>startup nomount sql>alter database mount;sql>alter database open;sql>startup
(1).用SQLplus 命令:show parameters參數(shù)名
(2).用select [列名] from 表名
2.初始化文件有幾種?默認(rèn)的保存位置在哪里?
初始化文件有三種:數(shù)據(jù)文件,日志文件,控制文件; 默認(rèn)的保存位置E:oracleproduct10.2.0oradataorcl
4.打開OEM,查看三類物理文件信息
三類物理文件:數(shù)據(jù)文件、控制文件、日志文件 數(shù)據(jù)文件:.DBF存儲表、索引及數(shù)據(jù)結(jié)構(gòu)信息
日志文件:.LOG記錄對數(shù)據(jù)庫的所有修改信息,用于恢復(fù)
控制文件:.CTL二進(jìn)制文件,記錄數(shù)據(jù)庫名、文件標(biāo)識、檢查點
5.分別用select命令查詢V$parameter動態(tài)性能視圖,用show命令查看全局?jǐn)?shù)據(jù)庫名、實例名、是否啟動自動歸檔、標(biāo)準(zhǔn)數(shù)據(jù)塊大小這四個參數(shù)的值,記錄命令和結(jié)果。用select命令查詢V$parameter動態(tài)性能視圖
用show命令查看全局?jǐn)?shù)據(jù)庫名、實例名
用show命令查看是否啟動自動歸檔、標(biāo)準(zhǔn)數(shù)據(jù)塊大小
6.如何用命令查看數(shù)據(jù)文件、控制文件的文件名、存儲位置和狀態(tài)信息?
(1).查看數(shù)據(jù)文件的文件名、存儲位置和狀態(tài)信息
(2).查看控制文件的文件名、存儲位置和狀態(tài)信息
0
和服務(wù)器型文件都要找到),查看各類默認(rèn)位置并記錄下來(包括物理文件所在目錄,該數(shù)據(jù)庫相關(guān)的各個目錄等),登錄到mydb數(shù)據(jù)庫。
2.用命令方式手工創(chuàng)建數(shù)據(jù)庫testorcl
(1)創(chuàng)建批處理文件,建立必需的各級目錄,參考第一題MYDB數(shù)據(jù)庫的默認(rèn)目錄。
(4)運(yùn)行數(shù)據(jù)庫建立腳本,更改相關(guān)服務(wù)為手動啟動方式
(5)運(yùn)行數(shù)據(jù)字典等創(chuàng)建腳本
3.在DBCA中刪除MYDB數(shù)據(jù)庫。
Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:oracleproduct10.2.0db_2RDBMSlog
二、完成下面的查詢,記錄查詢命令和結(jié)果。1.查詢HR方案種有哪些表,列出表名 2.設(shè)置行寬為160,每頁行數(shù)為40 3.查詢employees表中所有薪水在3000到6000元之間的員工編號、姓、名、受聘日期、工作代號、薪水、經(jīng)理代號、部門號,按部門號升序排列,同一部門按員工編號降序排列
4.查詢每個部門的人數(shù)、平均薪水、最高薪水、最低薪水,按部門編號升序排列
5.查詢first_name的第三個字母是t的員工編號,first_name,電話號碼,部門編號,部門名稱
6.在job_history表中查詢?nèi)温殨r間超過1年的員工編號,任職歷時月份(保留整數(shù)),工作代號,部門代號。
7.查詢每個部門經(jīng)理的員工編號、姓名、薪水、部門號。
【實驗結(jié)論】
一、需要訪問HR示例方案中的表,如果機(jī)器上沒有該示例方案,則運(yùn)行相關(guān)包和相應(yīng)配置裝入HR方案。
1.將hr.rar解壓到D:oracleproduct10.2.0db_2demoschema human_resources目錄下,然后在SQL*PLUS 中執(zhí)行 hr_main.sql
二、完成下面的查詢,記錄查詢命令和結(jié)果。1.查詢HR方案種有哪些表,列出表名
5.查詢first_name的第三個字母是t的員工編號,first_name,電話號碼,部門編號,部門名稱
738
實驗五
PL/SQL編程
【實驗?zāi)康摹?/p>
1.熟悉PL/SQL的數(shù)據(jù)類型和書寫規(guī)則 2.熟悉控制結(jié)構(gòu)和游標(biāo)的使用 3.編寫和運(yùn)行函數(shù)、過程和觸發(fā)器 【實驗內(nèi)容】
編寫腳本文件,調(diào)試運(yùn)行腳本文件,并記錄結(jié)果。
1.在SQL*Plus中編寫一個PL/SQL塊,功能用于打印學(xué)生信息 在DECLARE部分完成:
(2)建立學(xué)生信息記錄類型stu_record_type,包括學(xué)號,姓名,性別,籍貫,學(xué)習(xí)成績和活動成績。均為可變長字符類型(3)編寫本地子過程:學(xué)生信息打印過程PrintStuRecord,把(1)中定義的記錄類型作為參數(shù)(4)定義學(xué)生信息記錄變量stu_record 在BEGIN…END部分完成:
(1)為stu_record變量的各個元素賦值如下: 學(xué)號:‘2001001’ 姓名:’李新’
性別:‘m’
籍貫:‘黑龍江省哈爾濱市’ 學(xué)習(xí)成績:‘Excellent’
0
(1)建立學(xué)生信息記錄類型stu_record_type,包括學(xué)號,姓名,性別,籍貫,學(xué)習(xí)成績和活動成績。均為可變長字符類型
set serveroutput on declare type stu_record_type is record
(s_no varchar2(8), s_name varchar2(10), s_sex varchar2(2), s_address varchar2(20), s_studyscore varchar2(10), s_activescore varchar2(10));(2)編寫本地子過程:學(xué)生信息打印過程PrintStuRecord,把中定義的記錄類型作為參數(shù)
procedure PrintStuRecord as begin dbms_output.put_line('學(xué)號:'|| stu_record.s_no);dbms_output.put_line('姓名 :'|| stu_record.s_name);dbms_output.put_line('性別:'|| stu_record.s_sex);dbms_output.put_line('籍貫:'|| stu_record.s_address);dbms_output.put_line('學(xué)習(xí)成績:'|| stu_record.s_studyscore);dbms_output.put_line('活動成績:'|| stu_record.s_activescore);end PrintStuRecord;(3)定義學(xué)生信息記錄變量stu_record stu_record stu_record_type;在BEGIN…END部分完成:
(4)為stu_record變量的各個元素賦值如下: 學(xué)號:‘2001001’ 姓名:’李新’
性別:‘m’
籍貫:‘黑龍江省哈爾濱市’
2.建立對bookinfo表的DML觸發(fā)器,一旦bookinfo表發(fā)生了任何變化,立即觸發(fā),對bookinfo表的數(shù)據(jù)進(jìn)行統(tǒng)計,結(jié)果存儲在數(shù)據(jù)統(tǒng)計表中
(1)如果沒有則建立bookinfo表,選擇建立在scott用戶下,表結(jié)構(gòu)為(bookno varchar2(36)Primary key, bookname varchar2(40)not null, authorname varchar2(10)not null, publishtime date, bookprice float)
create table bookinfo(bookno varchar2(36)Primary key,4
Selectcount(bookno),count(distinct authorname)from bookinfo;end;/
(4)在bookinfo表中插入、刪除和更新信息,再查看major_stats表中數(shù)據(jù)的變化 <1>插入
647
實驗六
模式對象管理與安全管理
【實驗?zāi)康摹?/p>
1.了解模式對象的類型
2.掌握在OEM中操作模式對象的方法
3.掌握命令方式建立表、視圖、索引等常見對象的方法 4.熟悉Oracle中權(quán)限分類和設(shè)置,理解系統(tǒng)提供用戶的角色和權(quán)限
5.熟練使用建立用戶、角色,為用戶授權(quán)、授予角色的命令
【實驗內(nèi)容】
1.創(chuàng)建一個TESTUSET用戶,密碼為test,默認(rèn)表空間為user表空間
2.創(chuàng)建用戶后為其授予登錄數(shù)據(jù)庫和創(chuàng)建數(shù)據(jù)庫對象的權(quán)限 3.用TESTUSER用戶登錄數(shù)據(jù)庫
4.創(chuàng)建學(xué)生信息表(學(xué)號,姓名,性別,入學(xué)成績),定義主鍵和輸入數(shù)據(jù)(至少5條數(shù)據(jù)),提交添加的數(shù)據(jù)。并完成下面的題目:
(1)再繼續(xù)添加2條數(shù)據(jù),設(shè)置一個保存點savepoint,再添加1條數(shù)據(jù),執(zhí)行回退到保存點的回退命令。查看此時表中數(shù)據(jù)(2)查詢?nèi)雽W(xué)成績大于480的學(xué)生信息(3)建立男生信息視圖
(4)在“成績”字段上建立B-樹索引
5.創(chuàng)建一個表簇,名為empl_dep,容納empl表和dep表,有公
第四篇:ORACLE數(shù)據(jù)庫學(xué)習(xí)心得
ORACLE數(shù)據(jù)庫結(jié)課論文
一個好的程序,必然聯(lián)系著一個龐大的數(shù)據(jù)庫網(wǎng)路...今年我們學(xué)習(xí)了 oracle數(shù)據(jù)庫這門課程,起初的我,對這個字眼是要多陌生有多陌生,后來上課的時候聽一會老師講課,偶爾再跟上上機(jī)課,漸漸的學(xué)會了不少東西,但我感覺,我學(xué)到的仍是一些皮毛而已,懷著疑惑和求知的心態(tài),我在網(wǎng)上搜索了關(guān)于 oracle數(shù)據(jù)庫的一些知識。
1.ORACLE的特點: 可移植性 ORACLE采用C語言開發(fā)而成,故產(chǎn)品與硬件和操作系統(tǒng)具有很強(qiáng)的獨(dú)立性。從大型機(jī)到微機(jī)上都可運(yùn)行ORACLE的產(chǎn)品。可在UNIX、DOS、Windows等操作系統(tǒng)上運(yùn)行。可兼容性 由于采用了國際標(biāo)準(zhǔn)的數(shù)據(jù)查詢語言SQL,與IBM的SQL/DS、DB2等均兼容。并提供讀取其它數(shù)據(jù)庫文件的間接方法。
可聯(lián)結(jié)性 對于不同通信協(xié)議,不同機(jī)型及不同操作系統(tǒng)組成的網(wǎng)絡(luò)也可以運(yùn)行ORAˉCLE數(shù)據(jù)庫產(chǎn)品。
2.ORACLE的總體結(jié)構(gòu)
(1)ORACLE的文件結(jié)構(gòu) 一個ORACLE數(shù)據(jù)庫系統(tǒng)包括以下5類文件:ORACLE RDBMS的代碼文件。
數(shù)據(jù)文件 一個數(shù)據(jù)庫可有一個或多個數(shù)據(jù)文件,每個數(shù)據(jù)文件可以存有一個或多個表、視圖、索引等信息。
日志文件 須有兩個或兩個以上,用來記錄所有數(shù)據(jù)庫的變化,用于數(shù)據(jù)庫的恢復(fù)。控制文件 可以有備份,采用多個備份控制文件是為了防止控制文件的損壞。參數(shù)文件 含有數(shù)據(jù)庫例程起時所需的配置參數(shù)。
(2)ORACLE的內(nèi)存結(jié)構(gòu) 一個ORACLE例程擁有一個系統(tǒng)全程區(qū)(SGA)和一組程序全程區(qū)(PGA)。
SGA(System Global Area)包括數(shù)據(jù)庫緩沖區(qū)、日志緩沖區(qū)及共享區(qū)域。
PGA(Program Global Area)是每一個Server進(jìn)程有一個。一個Server進(jìn)程起動時,就為其分配一個PGA區(qū),以存放數(shù)據(jù)及控制信息。
(3)ORACLE的進(jìn)程結(jié)構(gòu)ORACLE包括三類進(jìn)程: ①用戶進(jìn)程 用來執(zhí)行用戶應(yīng)用程序的。
②服務(wù)進(jìn)程 處理與之相連的一組用戶進(jìn)程的請求。
③后臺進(jìn)程 ORACLE為每一個數(shù)據(jù)庫例程創(chuàng)建一組后臺進(jìn)程,它為所有的用戶進(jìn)程服務(wù),其中包括: DBWR(Database Writer)進(jìn)程,負(fù)責(zé)把已修改的數(shù)據(jù)塊從數(shù)據(jù)庫緩沖區(qū)寫到數(shù)據(jù)庫中。LGWR(Log Writer)進(jìn)程,負(fù)責(zé)把日志從SGA中的緩沖區(qū)中寫到日志文件中。
SMON(System Moniter)進(jìn)程,該進(jìn)程有規(guī)律地掃描SAG進(jìn)程信息,注銷失敗的數(shù)據(jù)庫例程,回收不再使用的內(nèi)存空間。PMON(Process Moniter)進(jìn)程,當(dāng)一用戶進(jìn)程異常結(jié)束時,該進(jìn)程負(fù)責(zé)恢復(fù)未完成的事務(wù),注銷失敗的用戶進(jìn)程,釋放用戶進(jìn)程占用的資源。ARCH(ARCHIVER)進(jìn)程。每當(dāng)聯(lián)機(jī)日志文件寫滿時,該進(jìn)程將其拷貝到歸檔存儲設(shè)備上。另外還包括分布式DB中事務(wù)恢復(fù)進(jìn)程RECO和對服務(wù)進(jìn)程與用戶進(jìn)程進(jìn)行匹配的Dnnn進(jìn)程等。
3.ORACLE的邏輯結(jié)構(gòu)
構(gòu)成ORACLE的數(shù)據(jù)庫的邏輯結(jié)構(gòu)包括:(1)表空間
(2)5種類型的段(segment)
①數(shù)據(jù)段;②索引段;③回滾(rollbock)段;④臨時段;⑤自舉(bootstrap)段。
段的分配單位叫范圍(Extent)
表空間(Tablespace)一個數(shù)據(jù)庫劃分成的若干邏輯部分稱為表空間。一個數(shù)據(jù)庫可以有一個或多個表空間,初始的表空間命名為SYSTEM,每一個邏輯表空間對應(yīng)于一個或多個物理文件。DBA使用表空間做以下工作: 控制數(shù)據(jù)庫對象,如表、索引和臨時段的空間分配。為數(shù)據(jù)庫用戶設(shè)置空間配額。
利用個別表空間的在線或離線,控制數(shù)據(jù)的可用性。后備或恢復(fù)數(shù)據(jù)。
通過分配空間,以改進(jìn)性能。
在每個數(shù)據(jù)庫中都存在SYSTEM表空間,它在建立數(shù)據(jù)庫時自動建立。在該表空間中,包含數(shù)據(jù)庫的數(shù)據(jù)字典,其中存儲全部數(shù)據(jù)庫對象的名字和位置。SYSTEM表空間總是在線的,像其它表空間一樣,可以通過增加新的數(shù)據(jù)庫文件來擴(kuò)大。一個表空間可包含許多表和索引。但一個表和索引不能跨越表空間,可跨越組成表空間的文件。在DB的打開的情況下,DBA利用ALTER TABLESPACE語句,可以實施表空間的在線或離線。SYSTEM表空間必須在線。表空間離線有下列原因: 一般為了使部分?jǐn)?shù)據(jù)庫不能使用,而允許正常存取數(shù)據(jù)庫其余部分。執(zhí)行表空間離線備份。
一個離線的表空間,不能被應(yīng)用用戶讀或編輯。
可以增加數(shù)據(jù)文件擴(kuò)大已有的表空間,也可增加新的表空間使數(shù)據(jù)庫容量增大,或分配空間給某個應(yīng)用。使用ALFER TABLESPACE ADD FILE語句將另一個數(shù)據(jù)文件加入到已存在表空間中。使用CREATE TABLESPACE語句可建立一個新的表空間。段(segment)表空間中的全部數(shù)據(jù)存儲在以段劃分的數(shù)據(jù)庫空間中。一個段是分配給數(shù)據(jù)庫用于數(shù)據(jù)存儲的范圍的集合。數(shù)據(jù)可以是表、索引或RDBMS所需要的臨時數(shù)據(jù)。段是表空間的下一個邏輯存儲的級別。一個段不能跨越一個表空間,但可跨越表空間內(nèi)的文件。一個數(shù)據(jù)庫最多需要五種段類型: 數(shù)據(jù)段 一個包含一個表(或聚集)的全部數(shù)據(jù),一個表(或聚集)總有一個單個數(shù)據(jù)段。
索引段 一個索引段包含對一個表(或聚集)建立的一個索引的全部索引數(shù)據(jù)。一個表可以有一個、多個或者沒有索引段,取決于它所擁有的索引個數(shù)。一個聚集必須至少有一個索引段,即在聚集碼上建立聚集索引。
回滾段 每個DB有一個或多個回滾段。一個回滾段是DB的一部分,它記錄在某一情況下被撤消的動作。回滾段用于事務(wù)控制和恢復(fù)。
臨時段 在處理查詢時,ORACLE需要臨時工作空間,用于存儲語句處理的中間結(jié)果,這個區(qū)稱為臨時段。
自舉段 自舉段在SYSTEM表空間中,在數(shù)據(jù)庫建立時建立。它包括數(shù)據(jù)字典定義,在數(shù)據(jù)庫打開時裝入。
4.用戶數(shù)據(jù)庫對象
由用戶建立的對象駐留在表空間中,含有真正的數(shù)據(jù)。數(shù)據(jù)庫對象有表、視圖、聚集、索引、偽列和序號生成器。
(1)聚集(Cluster)聚集是存儲數(shù)據(jù)的一種可選擇的方法。聚集包括存儲在一起的一組表,它們共享公共列并經(jīng)常一起使用。由于內(nèi)容相關(guān)并且物理地存儲在一起,存取時間得到改進(jìn),存儲空間可以減少。聚集是一種優(yōu)化措施。
聚集對性能的改進(jìn),依賴于數(shù)據(jù)的分布和SQL操作的內(nèi)容。特別是使用聚集對連接非常有利。可以明顯地提高連接的速度。建立聚集命令的基本格式: SQL>CREATE CLUSTER〈聚集名〉(列定義[,…]);利用聚集建立表命令基本格式: SQL>CREATE TABLE〈新表名〉(列定義[,…]CLUSTER〈聚集名〉(聚集列);在聚集碼上必須建立一個聚集索引,對于每一數(shù)據(jù)塊上每個聚集碼值有一索引項。這個索引必須在DML語句對聚集表操作前建立。建立索引的語句是:CREATE INDEX索引名ON CLUSTER聚集名;(2)序號生成器 序號(SEQUENCE)生成器為表中的單列或多列生成順序號。利用序號可自動地生成唯一主碼。使用SQL語句定義序號,給出一些信息(如序號名、是升序或降序、每個序號間的間隔和其它信息)。所有序號存儲在數(shù)據(jù)字典表中。
所有序號定義存儲在數(shù)據(jù)字典的SEQUENCE表中。用戶可以通過字典視圖
USER-SE-QUENCES、ALL-SEQUENCES
和DBA-SEQUENCES查詢和存取。建立序號生成器的語句是: CREATE SEQUENCE序號生成器名 其它選項。
一旦序號生成器S被定義。可用S.Currval來引用S序號生成器的當(dāng)前值。用S.nextval產(chǎn)生下一個新的序號并加以引用。
(3)偽列 偽列的行為像表的一列,但不真正存在于表中,在查詢時可引用偽列,但偽列不能插入、刪除或修改。
5.數(shù)據(jù)字典
數(shù)據(jù)字典ORACLE RDBMS最重要的部分之一。數(shù)據(jù)字典含有一組系統(tǒng)定義的表,只能讀,是關(guān)于數(shù)據(jù)庫的引用指南。它可提供以下信息:ORACLE用戶的用戶名;每個用戶被授予的權(quán)限和角色;實體的名字和定義;完整性約束 為數(shù)據(jù)庫實體分配的空間;通用的數(shù)據(jù)庫結(jié)構(gòu);審計信息;觸發(fā)子程序等的存儲。數(shù)據(jù)字典是以表和視圖構(gòu)成的,像其它數(shù)據(jù)庫數(shù)據(jù)一樣,可用SQL語言查詢數(shù)據(jù)字典。
數(shù)據(jù)字典在DB建立時建立。每當(dāng)DB進(jìn)入操作,數(shù)據(jù)字典就由ORACLE RDBMS負(fù)責(zé)修改。數(shù)據(jù)庫建立時有兩個默認(rèn)DBA用戶:SYS、SYSTEM。SYS持有基本表中的數(shù)據(jù)。數(shù)據(jù)字典包含一組基表和相關(guān)的視圖,可分為以下幾類: 類
描 述
DBA-××× 只有DBA可存取的視圖,給出數(shù)據(jù)庫中定義的任何實體的信息
USER-××× 對任何用戶可用的視圖,給出他們自己的實體的信息
ALL-×××
對任何用戶可用的視圖,給出用戶可存取的所有實體的信息
其中×××代表表名或視圖名
下面列出的是一些常用的表或視圖的名稱。(1)DTAB 描述了組或數(shù)據(jù)字典的所有表。(2)TAB 用戶建的所有基本表、視圖和同義詞。(3)COL 用戶創(chuàng)建基本表的所有列的信息。
(4)SYNONYMS 用戶可存取的同義名詞、專用名和公用名。(5)CATALOG 用戶可存取的表、視圖、同義詞、序列。(6)CONSTRAINTS 用戶可存取的約束。(7)INDEXES 用戶可存取的表和聚集的序列。(8)OBJECTS 用戶可存取的對象。(9)TABLES 用戶可存取的表。(10)USERS 查看當(dāng)前全部用戶。(11)VIEWS 查看用戶可存取的視圖。
(12)SYSTABAUTH 用戶對數(shù)據(jù)對象的使用權(quán)限。可以用SQL>SELECT*FROM〈字典表名或視圖名〉WHERE〈條件〉來讀取有關(guān)信息。
可以用SQL>DESCRIBE〈表名〉來查看表的結(jié)構(gòu)定義。但是數(shù)據(jù)庫字典的結(jié)構(gòu)不可改。用DESCRIBE命令還可以查看視圖及過程的定義。
6.ORACLE的SQL、PL/SQL與SQL*PLUS 作為ORACLE數(shù)據(jù)庫核心的SQL語言是ANSI和ISO的標(biāo)準(zhǔn)SQL的擴(kuò)充。用來存儲、檢索和維護(hù)數(shù)據(jù)庫中的信息,并控制對數(shù)據(jù)庫的存取事務(wù)。由于RDBMS執(zhí)行SQL語句時,是一次只執(zhí)行一條語句,它是非過程化的。這就使得單條的SQL語句使用方便,功能強(qiáng)大。用戶只需說明操作目的,不必關(guān)心具體操作的實現(xiàn)方法。
但在實際數(shù)據(jù)庫應(yīng)用開發(fā)中,往往要依據(jù)前一步對數(shù)據(jù)庫操作的結(jié)果或上一個事務(wù)提交的情況來確定下一步的操作。故ORACLE推出了一種PL/SQL工具,它擴(kuò)充了SQL語句,使之具有可進(jìn)行過程化編程的能力,如循環(huán)、分支功能。PL/SQL可支持變量和常量的使用。例如在SELECT查詢語句的where子句中可以使用變量來書寫條件表達(dá)式。SQL*PLUS是ORACLE用來存儲、查詢、操縱、控制和報告數(shù)據(jù)庫中信息的一個交互式工具。它是一種集編輯、調(diào)試、運(yùn)行于一體的開發(fā)環(huán)境。在SQL*PLUS的這種運(yùn)行環(huán)境下,既可以使用SQL命令、PL/SQL語句、及SQL*PLUS自己提供的命令,又可以運(yùn)行由上述三類命令(或語句)編輯而成的命令文件。SQL*PLUS提供的附加命令主要用來編輯、運(yùn)行上述三類命令及命令文件和對查詢結(jié)果進(jìn)行格式化輸出等功能。
7.數(shù)據(jù)庫系統(tǒng)的管理
ORACLE作為一個大型的數(shù)據(jù)系統(tǒng),通常包含很多用戶的數(shù)據(jù)。在應(yīng)用開發(fā)過程中,有許許多多的各類人員進(jìn)行開發(fā)和應(yīng)用。所以必須要求有人對數(shù)據(jù)庫系統(tǒng)進(jìn)行臨時管理,并進(jìn)行數(shù)據(jù)的備份等工作。這種人被稱為數(shù)據(jù)庫管理員(Data Base Administrator)。他們必須理解數(shù)據(jù)庫系統(tǒng)管理,清楚數(shù)據(jù)庫包含的數(shù)據(jù)內(nèi)容、運(yùn)行狀況等。
一般說來,DBA不是指具體的人,而是指對數(shù)據(jù)庫可以行使DBA特權(quán)的用戶。DBA具有如下責(zé)任:(1)ORACLE服務(wù)器和客戶工作站軟件的安裝和升級;(2)創(chuàng)建基本的數(shù)據(jù)庫存儲結(jié)構(gòu)(表空間);(3)創(chuàng)建基本的數(shù)據(jù)庫客體(表、視圖、索引);(4)修改數(shù)據(jù)庫結(jié)構(gòu);(5)給用戶授權(quán),維護(hù)系統(tǒng)安全;(6)控制和管理用戶對數(shù)據(jù)庫的訪問;(7)監(jiān)視和優(yōu)化數(shù)據(jù)庫的性能;(8)計算數(shù)據(jù)庫信息的后備和恢復(fù);(9)后備和恢復(fù)數(shù)據(jù)庫;(10)構(gòu)造ORACLE服務(wù)器,如創(chuàng)建數(shù)據(jù)庫鏈、客體同義詞等。而應(yīng)用開發(fā)人員須完成:(1)應(yīng)用程序設(shè)計;(2)應(yīng)用的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和修改;(3)為DBA提供必要的信息;(4)完成應(yīng)用程序的開發(fā)。
看了許多關(guān)于ORACLE的知識論壇,總算是對ORACLE有個整體的認(rèn)識,不僅僅是拘泥于課堂上學(xué)習(xí)的知識而已,雖然自己對ORACLE學(xué)習(xí)并不是多么的透徹,但是總歸多接觸點新的東西總是好的。
這一個學(xué)期,也是臨近畢業(yè)的時候了,很感謝賈老師的嚴(yán)格要求,讓我在學(xué)習(xí)上有了很大的進(jìn)步,同時也改掉了一些惰性,能積極的投入到學(xué)習(xí)中去了,不懂就大膽的問同學(xué),請學(xué)習(xí)好的同學(xué)幫助講解,最后,真心的祝福賈老師工作順利,身體健康!
第五篇:Oracle數(shù)據(jù)庫總結(jié)范文
創(chuàng)建表及命名規(guī)則?
表名和列名:
必須以字母開頭 必須在1–30個字符之間
必須只能包含A–Z, a–z, 0–9, _, $, 和# 必須不能和用戶定義的其他對象重名 必須不能是Oracle 的保留字 Oracle默認(rèn)存儲是都存為大寫
增刪改查語法?
增加: 例如:使用INSERT語句往customers表中插入數(shù)據(jù),指定相關(guān)列和值 INSERT INTO customers(customer_id, first_name, last_name, dob, phone)VALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
如果為表所有列都指定值,那么可以忽略列清單
INSERT INTO customersVALUES(6, 'Fred', 'Brown', '01-1月-1970', '800-555-1215');
可以使用NULL為某些列指定空值
INSERT INTO customersVALUES(8, 'Sophie', 'White', NULL, NULL);
查詢:select * fromcustomers;或者select字段 fromcustomerswhere條件 刪除:deletefromcustomerswhere條件
更改:update customersset name = 'xiaoming',age = ‘16’(更改多個字段時候用逗號隔開)where 條件
對查詢結(jié)果進(jìn)行排序?
語句:select * fromcustomersorderby字段 desc;
(asc(升序),desc(降序)如果不寫,默認(rèn)升序)
NULL值了解么?
NULL值表示未知的值。它是一個特殊的值,但并不是空字符串,NULL值表示該列是未知的。當(dāng)某些查詢語句在輸出結(jié)果列上看不到值的時候,可能就是NULL值
NVL()和NVL2():
NULL值被查詢出來的時候沒有顯示信息,如何告知用戶這是空字符串還是NULL,這可以通過NVL()函數(shù)來進(jìn)行處理
NVL(x,value)是有value顯示本身,null顯示為替換的value NVL2(x,value1,value2)是如果x不為NULL值,返回value1,否則返回value2 例程:
select name,nvl2(email,'已知','未知')from student;【代碼含義:代表如果email字段中有值,則顯示已知,null則顯示未知,如果想顯示本來的查詢結(jié)果select name,nvl(email,'未知')from student;】 update student set name = replace(name,'小','大');【代碼含義:代表將STUDENT表中NAME 字段中如果含有小字,那么就將小字替換為大字(操作的不是顯示結(jié)果,而是將表中數(shù)據(jù)進(jìn)行更改)】
Oracle中的簡單函數(shù)?
字符串函數(shù)
? concat:將x和y拼接起來,并返回新字符串
例程:
select concat(first_name,'-'||last_name)姓名 from customers;? Instr字符查找,從1開始。
select instr('asdbcrdbewqrbmde','b')from dual;select instr('asdbcrdbewqrbmde','b',5,2)from dual;【代表從第5個字符開始,第二個b所在的位置】
? Ltrim : LTRIM(x,[trim_string])從x字符串左側(cè)去除所有的trim_string字符串,如果沒有指定trim_string字符串,則默認(rèn)為去除左側(cè)空白字符
? Rtrim RTRIM(x,[trim_string])從x字符串右側(cè)去除所有的trim_string字符串,如果沒有指定trim_string字符串,則默認(rèn)為去除右側(cè)空白字符 ? Trim TRIM(trim_string FROM x)從x字符串兩側(cè)去除trim_string字符串
? Replace REPLACE(x, search_string, replace_string)從字符串x中搜索search_string字符串,并使用replace_string字符串替換。用select執(zhí)行并不會修改數(shù)據(jù)庫中原始值,但是用update執(zhí)行可以修改。
? Substr SUBSTR(x, start,[length])返回字符串中的指定的字符,這些字符從字符串的第start個位置開始,長度為length個字符;如果start是負(fù)數(shù),則從x字符串的末尾開始算起;如果length省略,則將返回一直到字符串末尾的所有字符
例程:
select substr('abcd月fg',4,2)from dual;(結(jié)果:d月)select substr('abcdefg',-2)from dual;(結(jié)果:fq)
日期函數(shù)
? Sysdate 例程:
Selectsysdatefromdual;
Select to_char(sysdate, 'yyyy-mm-dd-hh-mm-ss')from dual;
? Add_months(d1,n1)? last_day():
轉(zhuǎn)換函數(shù)
? To_char TO_CHAR(x,[ format])將x轉(zhuǎn)化為字符串。format為轉(zhuǎn)換的格式,可以為數(shù)字格式或日期格式
select to_char(sysdate,'yyyy-mm-dd')from dual;【一般在查詢時候使用,使返回的值成為指定格式】
? to_date TO_DATE(x,[format])將x字符串轉(zhuǎn)換為日期
insert into student values(seq_stu.nextval,'小明',to_date('1992-2-18','yyyy-mm-dd'),default,'北京',null);【一般在添加使用】 返回所查詢的值中最后一個日期數(shù)據(jù)。
聚合函數(shù)
? Avg:平均數(shù) ? Sum:求和 ? Max:最大值 ? Min:最小值 ? Count:返回統(tǒng)計的行數(shù) ? Round:四舍五入
例程:
select round(avg(bid),1)from bug;分組了解么?
有時需要對表中的行進(jìn)行分組,然后統(tǒng)計每組的信息,可以使用GROUP BY進(jìn)行分組,然后再對每組進(jìn)行統(tǒng)計。
(1)可以使用GROUP BY對多個列進(jìn)行分組
例:
SELECT product_id, avg(customer_id)FROM purchases GROUP BY product_id;
(2)可以對分組后的行使用聚集函數(shù),聚集函數(shù)會統(tǒng)計每組中的值,對于每組分別統(tǒng)計后返回一個值 例:
SELECT
product_type_id,BY
COUNT(ROWID)FROM
BY
productsGROUP product_type_id;注意:
product_type_idORDER a)如果查詢中使用了聚集函數(shù),被查詢的列未使用聚集函數(shù)處理,那么這些列必須出現(xiàn)在GROUP BY子句后,否則,會提示ORA-00937錯誤
b)不能使用聚集函數(shù)作為WHERE子句的篩選條件,否則,會提示ORA-00934錯誤
c)可以使用HAVING子句過濾分組后的行
SELECT...FROM...WHERE GROUP BY...HAVING...ORDER BY...;(GROUP BY使用時可以不使用HAVING,但是使用HAVING時必須有GROUP BY才有意義)
(3)同時使用WHERE, GROUP BY和HAVING
a)首先,執(zhí)行WHERE篩選掉不符合條件的行 b)然后,將符合條件的行使用GROUP BY進(jìn)行分組 c)最后,使用HAVING對分組統(tǒng)計的結(jié)果進(jìn)行再次篩選 例:
SELECT product_type_id, AVG(price)FROM products
WHERE price < 15
GROUP BY product_type_id HAVING AVG(price)> 13 ORDER BY product_type_id;
表的約束條件?
目的:
確保表中數(shù)據(jù)的完整性。
常用的約束類型: 主鍵約束(PRIMARY KEY):要求主鍵列數(shù)據(jù)唯一,并且不允許為空 非空約束(NOT NULL):指定的列的值不允許為空
唯一鍵約束(UNIQUE):要求該列唯一,允許為空,但只能出現(xiàn)一個空
值
檢查約束(CHECK):指定表中一列或多列可以接受的數(shù)據(jù)值格式 默認(rèn)約束(DEFAULT):指定某列的默認(rèn)值
外鍵約束(FOREIGN KEY):用于建立和加強(qiáng)兩個表數(shù)據(jù)之間連接的一
列或多列。通過將表中的主鍵列添加到另一個表中。可以創(chuàng)建兩個表之間的連接。這個主鍵的列就稱為第二個表的外鍵。外鍵約束就可以確保添加到外鍵表中的任何行都在主表中都存在相應(yīng)的行
多表查詢?
不同的數(shù)據(jù)存儲在不同的表中,通常要查詢多張表才能找到需要的數(shù)據(jù)
例程: SELECT products.name, product_types.name FROM products, product_types WHERE
products.product_type_id
= product_types.product_type_id AND products.product_id = 3;
products表和product_types表相關(guān)字段會用在SELECT語句及WHERE子句上,可以給表起別名,提高代碼可讀性、降低書寫難度 例程:
SELECT p.name, pt.name FROM products p, product_types pt WHERE p.product_type_id = pt.product_type_id AND p.product_id = 3 注意:
如果查詢兩張表,并且沒有定義連接條件,那么查詢的結(jié)果集是兩表相乘的結(jié)果,這樣的情況稱之為笛卡爾乘積。總結(jié):多表查詢WHERE時,連接次數(shù)=查詢時連接表的數(shù)量-1
常見的三種連接類型:
內(nèi)連接:
內(nèi)連接返回的行只有滿足連接條件才會返回。如果連接條件的列中有NULL值,那么該行則不會返回 外連接:
外連接返回的行滿足連接條件,也包括在連接條件的列包含空值的行
自連接:
連接的表為同一張表
子查詢?
子查詢是嵌入到另一個SELECT語句中的一個SELECT語句。通過使用子查詢,可以使用簡單的語句組成強(qiáng)大的語句。當(dāng)需要從表中選擇行,而選擇條件卻取決于該表自身中的數(shù)據(jù)時,子查詢非常有用。
單行子查詢:(1)可以將另外一個查詢作為WHERE子句的子查詢
例:查詢尾名是‘Brown’的首名和尾名
SELECT first_name, last_name FROM customers
WHERE customer_id =
(SELECT customer_id FROM customers WHERE last_name = 'Brown');(2)在單行子查詢還可以使用其他比較運(yùn)算符,如<>、<、>、<=和>= 例:查詢價格大于平均價格的商品編號、名稱及價格
WHERE子句中使用>,以及子查詢中使用AVG()聚集函數(shù)
SELECT product_id, name, price FROM products WHERE price >(SELECT AVG(price)FROM products);(3)在HAVING子句中使用子查詢
HAVING是在分組統(tǒng)計后用于過濾行,同樣在HAVING子句后面可以跟子查詢。單行子查詢將返回結(jié)果用于HAVING子句過濾分組統(tǒng)計的行
例如:查詢平均價格小于最大平均值的商品編號及平均值
SELECT product_type_id, AVG(price)FROM products GROUP BY product_type_id HAVING AVG(price)<(SELECT MAX(AVG(price))FROM products GROUP BY product_type_id)ORDER BY product_type_id;
分頁查詢?
可以通過ROWNUM來實現(xiàn)。
序列?
序列是一個數(shù)據(jù)庫對象,用于生成一系列的整數(shù)。
索引?
索引是與表關(guān)聯(lián)的可選結(jié)構(gòu)。可以創(chuàng)建索引以加快對表執(zhí)行SQL語句的速度。就像書的索引可以幫助我們更快速的查找信息一樣,Oracle中的索引也提供了一種更快地訪問表數(shù)據(jù)的途徑。
視圖?
視圖是基于一張表或多張表或另外一個視圖的邏輯表。視圖不同于表,視圖本身不包含任何數(shù)據(jù)。表是實際獨(dú)立存在的實體,是用于存儲數(shù)據(jù)的基本結(jié)構(gòu)。而視圖只是一種定義,對應(yīng)一個查詢語句。視圖的數(shù)據(jù)都來自于某些表,這些表被稱為基表。數(shù)據(jù)庫中只在數(shù)據(jù)字典中存儲對視圖的定義。