久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結

時間:2019-05-13 09:13:36下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結》。

第一篇:Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結

Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結

以下的文章主要是介紹在Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結,其實想學好Oracle數(shù)據(jù)庫并不是一件很困難的事情,很多人都認為Oracle數(shù)據(jù)庫的體系過于龐大,在學習的過程中摸不到頭緒,以下的文章就會給你提供相關的解答方法。

1、如果有一定的數(shù)據(jù)庫基礎知道SQL是怎么回事,即使寫不出來簡單的SQL,但可以看動它們,你就可以跳到2。否則請先看一下數(shù)據(jù)庫基礎和SQL語言,不需要很深,更不需要去記憶那些復雜的SQL命令,這些可以留在以后邊應用邊學習、記憶。

2、要想學好Oracle數(shù)據(jù)庫,首先要學習ORACLE的體系結構,現(xià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它們之間的關系。

當然還要分清undo tablespace & redo log file等,對于很多初學者來說,能夠?qū)@些概念有個較為清晰的認識并不是一件容易的事,而這些并非Oracle的全部。

3、是有關ORACLE的一些基本概念,下面要學習的是一些簡單的的實際操作,就是如何去管理ORACLE數(shù)據(jù)庫,當然不是管理全部的ORACLE。在此過程中你將對SQL和ORACLE體系結構有個更深入的了解。

4、到了這一步你基本上算是初步掌握了ORACLE,下面將要根據(jù)你的方向來具體學習其它的ORACLE知識了。如果你是開發(fā)人員,則需要更多地去學習PL/SQL以及DEVELOPER,而這將是一門新的課程。如果你是一名DBA,請繼續(xù)。

5、現(xiàn)在你可以根據(jù)自己的實際情況,進行有選擇的學習,也就是說下面的內(nèi)容沒有特別順序要求。可以選擇深入學習ORACLE數(shù)據(jù)庫的管理、備份與恢復、性能調(diào)整、網(wǎng)絡等。當然在學習這些知識的過程中,如果有實際的工作更好,這樣你可以在實際中成長,學會TROUBLE SHOOTING。

6、當然在學習的過程中,你可以在網(wǎng)站或論壇中與他人進行交流,可以看別人的一些經(jīng)驗文章,也可以自己寫一些心得體會。技術進步的本身就是經(jīng)驗的積累和提煉過程,希望大家共同成長,歡迎大家相互交流。

第二篇:ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗總結

ORACLE數(shù)據(jù)庫開發(fā)經(jīng)驗總結

----ORACLE數(shù)據(jù)庫作為大型數(shù)據(jù)庫管理系統(tǒng),近年來一直占有世界上高端數(shù)據(jù)庫的最大 份額,其強大而完善的數(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 使用技巧:----①查找重復記錄:

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相同且重復的記錄。----刪除重復記錄:

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相同且重復的記錄。----② 快速編譯所有視圖

----當在把數(shù)據(jù)庫倒入到新的服務器上后(數(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 當然,授權和創(chuàng)建同義詞也可以快速進行,如:

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要進行一條一條的比較,共需要10000*10000次比較后,才能得到結果。該用外

聯(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;----相關UTL_FILE數(shù)據(jù)庫包詳細信息可以參見相關資料。----⑤ 怎樣在數(shù)據(jù)庫觸發(fā)器中使用列的新值與舊值

----在數(shù)據(jù)庫觸發(fā)器中幾乎總是要使用觸發(fā)器基表的列值,如果某條語句需要某列修改 前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_ NO,:NEW.DEPT_NO。

----二.ORACLE DEVELOPER 2000使用技巧:

----① 改變FORM(FMX模塊)運行時的Runform4.5的題頭:

----DEVELOPER2000中FMX默認題頭為:Developer/2000 Forms Runtime for Windows

/ NT 你可以改為自己定義的標題,----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.設置該Item屬性如下:----

Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:為空

----③ 怎樣創(chuàng)建動態(tài)下拉列表List

----Developer 2000 中的列表是通過設置相關屬性而完成數(shù)據(jù)項的列表設置的,但那

只是靜態(tài)的,有時你想讓某項成為動態(tài)的列表,隨輸入數(shù)據(jù)的改變而改變,就需要動手 去編個小程序。下面詳細介紹怎樣去做:----有塊EBOP_CABLE_ACCOUNT,下有SPECIFICATION數(shù)據(jù)項,當一進入該模塊時,就將

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;----這樣一進入該FMX,就會動態(tài)刷新該列表。除此之外,SPECIFICATION數(shù)據(jù)項改為列 表項。

----④ 當顯示多條記錄且數(shù)據(jù)項特別多時,如何組織錄入及顯示界面:----如上圖所示,PRN代碼及設備代碼在畫布1(CONTENT型)上,其它數(shù)據(jù)項在畫布2(ST ACK型)上,所有數(shù)據(jù)項為一個表的列或一個塊的數(shù)據(jù)項。在拉動水平滾動條時或用TAB或 敲回車鍵時,將看到全部數(shù)據(jù)項。這種排布方法適用于數(shù)據(jù)項特別多又想顯示多條記錄 時用。主要制作順序為:先建立兩個畫布,畫布1(CONTENT型),畫布2(STACK型),然后

建立塊,選畫布時用畫布1,這樣所有項都顯示在畫布1上,然后選中除PRN代碼及設備代 碼之外的所有數(shù)據(jù)項,選TOOLS菜單下的PROPERTIES選項,將這些數(shù)據(jù)項的CANVAS屬性選

為畫布2(STACK型),然后調(diào)整整體位置就可以了。----⑤ 如何在FORM的受限觸發(fā)子中提交保存數(shù)據(jù)

----在FORM中很多觸發(fā)子是不能用COMMIT WORK語句的,當你在該觸發(fā)子中使用了UPDA

TE,DELETE等操作并想立即存盤時,就需要COMMIT WORK語句了。首先在服務器端建立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;就可以了,當然你可以根據(jù)自己

需要將該過程加入?yún)?shù),這樣通過參數(shù)可以得到執(zhí)行DML語句的權限。----⑥ 如何在FORM中實現(xiàn)某數(shù)據(jù)項自動按記錄序號加一操作

----設塊名為VO,要操作的數(shù)據(jù)項為VO_ID,在該塊中建立塊級觸發(fā)子WHEN-CREATE-REC

ORD,加入如下代碼:

:VO_ID:=:System.Trigger_Record;----這樣每當生成新記錄時VO_ID就會自動加一了。

----⑦ 如何在一個FORM中調(diào)用另一個FORM,或在一個塊中調(diào)用另一個塊時顯示特定的 記錄有時用戶會要求在調(diào)用另一個FORM時,只顯示相關的記錄,舉例如下,在一個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=''支架預制''');OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);END;

----其中EM_NAME,EM_PROJECT_NAME為本FORM某塊的數(shù)據(jù)項,PAYMENT為要調(diào)用的FORM 模塊。這樣通過傳遞參數(shù)列表就可以得到想要的結果。在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中當有主從塊時,連續(xù)輸入記錄如何避免被不斷的提示保存:

----每輸入一條主記錄和若干條該主記錄的從記錄后,此時再導航到主塊輸下一條記錄,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.初始值選’責任方’,然后將這四個值輸入到DATA SELECTION中,形成列表。----3.然后處理QUERY中的SQL語句: select CHARGER,FCO_NO,EM_NAME,FCO _NO,DESCRIPTION, FCR_POINT from FCR_MAIN ORDER BY DECODE(:SORT,'責任方',CHARGER,'FCO號', FCO_NO,'FCR號',FCR_NO,'FCR號',EM_NAME)----⑩ 在Developer 2000中如何讀寫操作系統(tǒng)文件

----在用Developer 2000的開發(fā)工具開發(fā)應用程序時,經(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表空間該表的占用空間并未釋放,反復幾次DR OP,DELETE操作后,該TABLESPACE上百兆的空間就被耗光了。----② 數(shù)據(jù)庫文件的移動方法

----當想將數(shù)據(jù)庫文件移動到另外一個目錄下時,可以用ALTER DATABASE命令來移動(比ALTER TABLESPACE適用性強):

----1.使用SERVER MANAGER關閉實例.SVRMGR > connect internal;SVRMGR > shutdown;SVRMGR >exit;----2.使用操作系統(tǒng)命令來移動數(shù)據(jù)庫文件位置(假設這里操作系統(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)驗總結

第三篇:Oracle數(shù)據(jù)庫學習總結

Oracle數(shù)據(jù)庫學習總結

1.set linesize xx;設置行間距,常用數(shù)值有100,200,300

2.set pagesize xx;設置每頁顯示行數(shù)

3.ed x;表示新建一個x.sql文件,通過文件編輯SQL語句,然后用@x命令可以調(diào)用剛才的命令

4.CONN username/password;命令可以建立用戶的連接,需要注意的是sys用戶是超級管理員,連接是時需要在末尾加上AS SYSDBA 以系統(tǒng)管理員的身份進行連接

5.如果表是歸某個用戶特有的,在查詢的時候需要加上用戶名 即以 用戶名.表名 的格式查詢

6.SHOW USER;命令可以顯示當前連接的用戶名

7.SELECT * FROM tab;可以顯示當前用戶下的所有數(shù)據(jù)表

8.“ / ”表示重復執(zhí)行上一次的SQL命令操作

9.SELECT xx別名,xx 別名 FROM xx;搜索指定列名,并指定別名,方便顯示

10.關鍵字DISTINCT 可以消除重復值 如 SELECT DISTINCT xx FROM xx;

11.Oracle中提供的字符串連接操作,使用“||”表示,相當于Java的“+”普通字符用“ ' ” 括起來

如: SELECT'員工姓名是'||ename||'員工卡號是'||empnoFROM emp;

12.查詢語句 BETWEEN xx AND xx 是包括邊界的13.查詢?nèi)掌诘臅r候要加上''把日期引起來

例如:SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-81' AND '08-9月-81';

14.模糊查詢中“%”可以匹配任意長度的內(nèi)容,“_”可以匹配一個長度的內(nèi)容,如果沒輸入模糊查詢關鍵字,那么默認查詢?nèi)繑?shù)據(jù),like關鍵字可以用在任何地方,可以匹配數(shù)字、字符、日期等。

15.SQL中不等于可以用“<>”或者“!=”表示

16.ORDER BY語句中 ASC表示升序,DESC表示降序,在沒指定的時候默認按照升序排序

17.Oracle中的單行函數(shù)有如下,默認的所有的函數(shù)都要到表中執(zhí)行,加上關鍵字DUAL只會產(chǎn)生一個臨時表

UPPER('xxx')將小寫轉(zhuǎn)換為大寫

LOWER('xxx')將大寫轉(zhuǎn)換為小寫

INITCAP('xxx')將首字母大寫

CONCAT('','')字符串連接

SUBSTR('xxx',x,x)字符串截取,從0或1開始截取效果是一樣的,因為Oracle比較智能,要是輸入的參數(shù)為負數(shù),則表示倒著截取

LENGTH('xxx')字符串長度

REPLACE('xxx','x','x')字符串替換

ROUND(xxx,xx)四舍五入 xxx需要四舍五入的數(shù)值,xx保留的小數(shù)位,可以加負數(shù) TRUNC(xxx)截斷操作,默認小數(shù)點后的全部截斷,也可以指定小數(shù)點保留位數(shù)如TRUNC(789.536,2)得到的結果是789.53,也可以加負數(shù)如TRUNC(789.536,-2)結果是700

18.SELECT sysdate FROM DUAL;可以求出當前的日期

19.Oracle 中提供了以下日期函數(shù)支持:

MONTHS_BETWEEN()求出給定日期范圍的月數(shù)

ADD_MONTHS(xxx,xxx)在指定日期加上指定的月數(shù)

NEXT_DATE(xxx,'')求出下一個給定日期數(shù)

TO_CHAR()可以將年、月、日進行分割

例如

TO_CHAR(hirdate,'yyyy')year,TO_CHAR(hirdate,'mm')months,TO_CHAR(hirdate,'dd')day 還可以對時間進行格式化輸出 如TO_CHAR(hirdate,'yyyy-mm-dd')

TO_CHAR(hirdate,'fmyyyy-mm-dd')可以去掉前導0

TO_CHAR()還可以對數(shù)字進行格式化 如

SELECT ename,TO_CHAR(SAL,'99,999')FROM emp;

注意:一定要用9來表示

$表示美元符號,L表示Local的縮寫,以本地語言進行金額顯示

TO_NUMBER()將字符串變?yōu)閿?shù)字

TO_DATE()將字符串變?yōu)镈ate類型 例如 SELECT TO_DATE('2009-12-8','yyyy-mm-dd')FROM dual;

TO_NVL()可以將NULL的內(nèi)容變?yōu)橹付ǖ膬?nèi)容

DECODE()相當于Java的if else else語句

例如SELECT DECODE(1,1,'內(nèi)容是1',2,'內(nèi)容是2',3,'內(nèi)容是3')FROM dual;將輸入 內(nèi)容是1

20.左右連接

SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE

e.deptno(+)=d.deptno;此例中是右連接,以deptno表為準。

21.SQL1999語法

CROSS JOIN 交叉連接 會產(chǎn)生笛卡爾積

NATURAL JOIN 自然連接 自動進行關聯(lián)字段匹配 可以消除笛卡爾積

USING 子句:直接關聯(lián)操作列 如 SELECT * FROM emp e JOIN dept USING(deptno)WHERE deptno=30;

ON 子句 用戶自己編寫連接條件

LETF JOIN/RIGHT JOIN 左右連接

SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e right OUTER JOIN dept d ON(e.deptno=d.deptno);

22.分組查詢GROUP BY 放在where之后

常見的組函數(shù)有

COUNT();

MAX();

MIN();

AVG();

SUM();

用法如下:SELECT deptno,count(empno)FROM emp GROUP BY deptno;

語法:SELECT deptno,empno,count(empno)FROM emp GROUP BY deptno;是錯誤的,原因是使用分組函數(shù)的時候,不能出現(xiàn)分組函數(shù)和分組條件以外的字段。

語法:SELECT deptno,count(empno)FROM emp;是錯誤的,原因是不使用分組的時候,則只能單獨使用分組函數(shù)

分組函數(shù)只能在分組中使用,不允許子啊where語句中個使用,要使用個分組條件可以加上HAVING

例如:SELECT deptno,avg(sal)FROM emp GROUP BY deptno having avg(sal)>2000;注意:分組函數(shù)可以嵌套使用,但是在組函數(shù)嵌套使用的時候不能再出現(xiàn)分組條件的查詢語句

如下語法是錯誤的:SELECT deptno,max(avg(sal))FROM emp GROUP BY deptno;不能出現(xiàn)deptno

如下語法是正確的:SELECT max(avg(sal))FROM emp GROUP BY deptno;

23.子查詢中

>ANY 比里面的最小值大

=ANY 與IN用法相同

>ALL 比里面的最大值大

24.表復制

CREATE TABLE myemp AS SELECT * FROM emp;既復制表結構,又復制表內(nèi)容

CREATE TABLE myemp AS SELECT * FROM emp where 1=2;后面的條件不可能成立,只復制表結構

25.Oracle 中常用的數(shù)據(jù)類型

VARCHAR、VARCHAR2 代表一個字符串,有長度限制,為255

NUMBER 分為兩種

1)NUMBER(n)代表一個整數(shù),數(shù)字的長度是n,可以使用INT

2)NUMBER(m,n)代表一個小數(shù),小數(shù)長度為n,整數(shù)長度為m-n,可以使用FLOAT

DATE 代表日期的類型,日期要按照標準的日期格式進行存放

CLOB 大對象,表示大文本數(shù)據(jù),一般可以存放4G的文本

BLOB 大對象,表示二進制數(shù)據(jù)最大可以存放4G,例如存放歌曲、電影、圖片

26.表的創(chuàng)建

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

27.插入數(shù)據(jù)

INSERT INTO person(pid,name,birthdate,age)VALUES('222','里斯

',TO_DATE('1989-02-09','yyyy-mm-dd'),45);

28.更改表中數(shù)據(jù)

增加表結構:ALTER TABLE person ADD(address VARCHAR2(50)DEFAULT '暫無地址');

修改已存在的列:ALTER TABLE person MODIFY(name VARCHAR2(40)DEFAULT '無名氏');

29.表的重命名(只能在Oracle中使用)

RENAME XXX TO XXX;

30.約束(主要分為5類)

1)主鍵約束 主鍵表示是一個唯一的標識。本身不能為空

2)唯一約束 在一個表中只允許建立一個主鍵約束,而其他列如果不希望重復值的話,則可以使用唯一約束

3)檢查約束 檢出一個列的內(nèi)容是否合法

4)非空約束

5)外鍵約束 在兩張表中進行約束的操作 刪除時應該先刪除子表,再刪除父表 創(chuàng)建主鍵:

語法1

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

語法2:

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_id PRIMARY KEY(pid));

創(chuàng)建非空約束

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

創(chuàng)建唯一約束

語法一

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)UNIQUE NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男');

語法二

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_name UNIQUE(name),);

創(chuàng)建檢查約束

語法一

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL CHECK(age BETWEEN 0 AND 150),sex VARCHAR2(2)DEFAULT '男' CHECK(sex IN('男','女','中')),);

語法二

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男' ,CONSTRAINT p_age CHECK(age BETWEEN 0 AND 150),CONSTRAINT p_sex CHECK(sex IN('男','女','中')));

創(chuàng)建外鍵約束

--person表

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

--book表

CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid));

對于刪除,應該先刪除book表再刪除person表

也可以使用級聯(lián)刪除,強制刪除某張表

DROP TABLE person CASCADE CONSTRAINT;

設置外鍵約束級聯(lián)刪除

--person表

CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

--book表

CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)ON DELETE CASCADE);

31.修改約束

如果一張表已經(jīng)建立完成之后,則可以為其添加約束

ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 約束類型(約束字段);

關于約束名稱的命名最好要統(tǒng)一:

PRIMARY KEY :主鍵字段_PK

UNIQUE:字段_UK

CHECK:字段_CK

FOREIGH KEY:父字段_子字段_FK

例如:

DROP TABLE person;

CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男');

ALTER TABLE person ADD CONSTRAINT pid_PK PRIMARY KEY(pid);

ALTER TABLE person ADD CONSTRAINT name_UK UNIQUE(name);

ALTER TABLE person ADD CONSTRAINT age_CK CHECK(age BETWEEN 1 AND 150);CREATE TABLE book(bid NUMBER ,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18));

ALTER TABLE book ADD CONSTRAINT book_PK PRIMARY KEY(bid);

ALTER TABLE book ADD CONSTRAINT pid_FK FOREIGN KEY(pid)REFERENCES person(pid);刪除約束

ALTER TABLE person DROP CONSTRAINT name_UK;

ALTER TABLE person DROP CONSTRAINT age_CK;

第四篇:ORACLE數(shù)據(jù)庫學習總結

數(shù)據(jù)庫學習總結-Marlon

目錄一、二、三、四、五、六、七、八、ORACLE_簡介.............................................................................................................................................................1 ORACLE_簡單查詢.....................................................................................................................................................3 ORACLE標量函數(shù)和算數(shù)運算..................................................................................................................................5 ORACLE_多表查詢.....................................................................................................................................................9 ORACLE_列函數(shù)和分組...........................................................................................................................................10 ORACLE_子查詢.......................................................................................................................................................12 ORACLE_表的更新操作...........................................................................................................................................13 ORACLE_表與視圖的管理.......................................................................................................................................15

一、ORACLE_簡介

? Oralce數(shù)據(jù)庫發(fā)展 Oracle 8

Oracle 8i:i表示internet,標識著Oracle公司正式進軍互聯(lián)網(wǎng)。Oracle9i Oracle10g:g表示grid,即網(wǎng)絡技術。Oracle11g

? Oracle體系結構一 物理結構: 文件系統(tǒng) 控制文件 數(shù)據(jù)文件 日志文件

參數(shù)文件(不是數(shù)據(jù)庫的組成成分)

? Oracel體系結構三 邏輯結構: block 快 extent 盤區(qū) segment 段

tablespace 表空間 datafile 數(shù)據(jù)文件 ? SQL * Plus下的常用命令

? 連接到SQL*PLUS sqlplus user/password[as sysdaba|sysoper] sqlplus/nolog

? 啟動數(shù)據(jù)庫

startup mount 啟動實例,打開控制文件,但不打開數(shù)據(jù)文件 startup nomount 只啟動實例

? 關閉數(shù)據(jù)庫

shutdown immediate

? 迫使每個用戶執(zhí)行為當前的SQL語句,立即斷開連接 shutdown transactional

? 迫使用戶執(zhí)行完當前事務時,斷開連接 shutdown abort 強制關閉數(shù)據(jù)庫

? 常用SQL命令

show user:查看當前連接的用戶

connect scott/tiger: 采用scott的用戶名/tiger的密碼連接數(shù)據(jù)庫 desc table_name:查看tableName表結構 quit|exit:退出

disconnect:斷開連接

clear screen:清屏,相當于Windows下的cls命令 select * from tab:列出當前用戶下的所有表 @pata 執(zhí)行pata制定的腳本文件

? Oracle常用基本數(shù)據(jù)類型 varchar2/varchar:變成字符串 char:定長字符串 Integer:整型

number(m,n):數(shù)字型 smallint:短整型 float:浮點數(shù)

decimal:十進制數(shù)字(小數(shù))date:日期型

二、ORACLE_簡單查詢

? SQL結構化查詢語言(Structured Query Language)

? SQL分類

1.數(shù)據(jù)定義語言(Data Definition Language,DDL):create、alter、drop。

create table 表名;alter table add 新列名 數(shù)據(jù)類型;drop table 表名;2.數(shù)據(jù)操縱語言(Data Manipulation Language,DML):insert、update、delete、select。Insert into 表名(字段1,字段2…)values(值1,值2…);update student set sage=22 where sno='200215';(將學生200215的年齡改為22歲)select distinct job from emp;去除重復行

3.數(shù)據(jù)控制語言(Data Control Language,DCL):commit work、rollback work。? 查詢雇員的所有信息 select * from emp; *表示所有列

? 查詢語句的格式

select *|列名 from 表名

? 查詢雇員的編號,姓名,工資

select * from empno,ename,sal from emp;

? 查詢所有職位 select job from emp;select distinct job from emp;distinct: 有區(qū)別的(去除重復行)

? 查詢工資大于1500的雇員信息,列出編號,用戶名,工資 select empno,ename,sal from emp where sal>1500;

? 帶有where條件查詢語句的基本格式 select *|列名 from 表名 where 條件;

? 比較運算符 大于:> 小于:< 等于:= 大于等于:>= 小于等于:<= 不等于:!=或者<>

? 限定查詢 is null 和 is not null 的使用 ? 查詢每月可以得到獎金的雇員

select empno,ename,comm from emp where comm is not null;

select empno,ename,comm from emp where comm is not null and comm>0;? 查詢誰沒有獎金

select empno,ename from emp where comm is null;

? 限定查詢 and 的使用

? 查詢工資大于1500,并且可以領取獎金的雇員

SQL> select empno,ename,sal,comm from emp where comm is not null and sal>1500;

? 限定查詢 or 的使用

? 查詢工資大于1500和可以領取獎金的雇員

select empno,ename,sal,comm from emp where sal>1500 or comm is not null;? 查詢沒有獎金的雇員

select empno,ename,comm from emp where comm=0 or comm is null;

? 限定查詢 使用not對條件整體取反

? 查詢工資不大于1500并且不能領取獎金的雇員

select empno,ename,sal,comm from emp where sal<=1500 and(comm is null or comm=0);select empno,ename,sal,comm from emp where not(sal>1500 or comm is not null);

? 限定查詢 between...and...的使用

? 查詢基本工資大于等于1500并且小于等于3000的雇員

select empno,ename,sal from emp where sal>=1500 and sal<=3000;select empno,ename,sal from emp where sal between 1500 and 3000;? 查詢1981年雇傭的所有員工

select empno,ename,hiredate from emp where hiredate between'1-1月 1981' and '31-12月 1981';注:日期格式 日-月 年,要匹配上

? 限定查詢 字符串的比較

? 查詢姓名是'SMITH'員工的所有信息 select * from emp where ename='SMITH';select * from emp where ename='smith';注:列值區(qū)分大小寫

? 限定查詢 in的使用

? 查詢出編號7369,7499,7521的雇員的具體信息

select * from emp where empno=7369 or empno=7499 or empno=7521;select * from emp where empno in(7369,7499,7521);

? 限定查詢 not in的使用

? 查詢出雇員編號不是369,7499,7521的雇員的具體信息 select * from emp where empno not in(7369,7499,7521);

? 限定查詢 like的使用

? 查詢雇員的名字第二個字符是M的雇員信息 select * from emp where ename like'_M%';注:_匹配一個字符,%匹配0個多個字母(前綴或后綴的代表)? 查詢1982年入職的所有雇員的信息

select * from emp where hiredate like'%82';? 查詢工資中包含5的雇員信息

select * from emp sal where like'%5%';

? 對結果排序-Oracle By ? 查詢員工工資大于1500員工的信息,按工資排序 select * from emp where sal>1500 order by sal;? 查詢工資大于1500員工的信息,按工資降序,按雇傭日期升序排序 select * from emp where sal>1500 order by sal desc,hiredate asc;注:ASC升序,DESC降序,默認ASC。

ascending [?'sendi?]上升的,降序排列(descend [di'send] 的縮寫);

三、ORACLE標量函數(shù)和算數(shù)運算

字符函數(shù)的使用

? 轉(zhuǎn)換為大寫字母

select upper('smith')from dual;注:dual是公共表。upper ['?p?] 上面的,上部的

? 轉(zhuǎn)換為小寫字母

select lower('SMITH')from dual;注:lower 放下

? 每個單詞的字母變成大寫,其余字母小寫 select initcap('hello world')from dual

? 串連接(concat):可以使用“||”進行串連接 select concat('HELLO','WORLD')from dual;select 'HELLO'||'WORLD' from dual;

? 求子串(SUBSTR)select substr(ename,1,3)from emp;注:含義為截取ename字段從第一個字符開始,總共三個字符

? 求長度(LENGTH)select length(ename)from emp;

? 串替換(REPLACE)select replace('HELLO WORLD','WOR','WEL')from dual;結果:

REPLACE('HE-----------HELLO WELLD 注:第一個逗號是原字符,第二個逗號是原字符的一部分,第三部分是替換原字符那個部分。

? 要求顯示所有雇員的姓名和姓名的后三個字符

select ename,substr(ename,length(ename)-2)from emp;select ename,substr(ename,-3)from emp;

? 四舍五入(Round)select round(789.536)from dual;ROUND(789.536)--------------

790

? 四舍五入(Round):指定保留小數(shù)位數(shù) select round(789.536,2)from dual;----------------

789.54

? 四舍五入(Round):對整數(shù)四舍五入 select round(789.536,-2)from dual;ROUND(789.536,-2)-----------------

800

? 截斷小數(shù)位(TRUNC)select trunc(789.536)from dual;TRUNC(789.536)--------------

789

? 截斷小數(shù)位(TRUNC):指定保留小數(shù)位 select trunc(789.536,2)from dual;TRUNC(789.536,2)----------------

789.53

? 截斷小數(shù)位(TRUNC):對整數(shù)截斷 select trunc(789.536,-2)from dual;TRUNC(789.536,-2)-----------------

700 ? 除空格(TRIM)

SQL> SELECT TRIM(55)FROM DUAL;TRIM(55)--------55 ? 取余數(shù)(MOD)select mod(10,3)from dual;

? 日期函數(shù) 運算規(guī)律:

日期+數(shù)字=日期 日期-數(shù)字=日期

日期-日期=數(shù)字(天數(shù))

? 查詢當前日期

select sysdate from dual;SYSDATE-------------10-3月-12

? 顯示10部門員工進入公司的星期數(shù)

select empno,ename,round((sysdate-hiredate)/7)from emp where deptno=10;

? 在指定日期上加入指定的月數(shù)之后的日期(ADD_MONTHS)select add_months(sysdate,4)from dual;ADD_MONTHS(SYS--------------10-7月-12

? 求出給定日期范圍的月數(shù)(months_between)select empno,ename,months_between(sysdate,hiredate)from emp;

? 下一個給定的星期是那個日期(next_day)select next_day(sysdate,'星期一')from dual;注:表示在當前時間的前提下,下個禮拜一的具體日期

? 求出給定日期所在月份的最后一天日期(last_day)select last_day(sysdate)from dual;

? 轉(zhuǎn)換成字符串(to_char)查詢雇員號,姓名,以及入職的年份

select empno,ename,to_char(hiredate,'yyyy')from emp;注:yyyy匹配年份,mm匹配月份,dd匹配日

? 使用to_char設置日期的顯示格式

select empno,ename,to_char(hiredate,'yyyy-mm-dd')from emp;

? 使用fm去掉前導0 select empno,ename,to_char(hiredate,'fmyyyy-mm-dd')from emp;EMPNO ENAME

TO_CHAR(HI--------------------------

7369 SMITH

1980-12-17

7499 ALLEN

1981-2-20 注:正常的值是1981-02-20,02前面的0去掉,變成了1981-2-20.? 通過to_char設置數(shù)值的格式

select empno,ename,to_char(sal,'99,999')from emp;說明:9代表1位數(shù)字

EMPNO ENAME

TO_CHAR---------------------------

7369 SMITH

800

7499 ALLEN

1,600

7521 WARD

1,250 注:把sal的值分成兩個部分,后三位為一個部分,前兩位為一個部分,用逗號隔開。

? 顯示余額

select empno,ename,to_char(sal,'$99,999')from emp;說明:$代表美元

? 轉(zhuǎn)換成數(shù)字(to_number)select to_number('123')+to_number('123')from dual;TO_NUMBER('123')+TO_NUMBER('123')--

246

? 轉(zhuǎn)換成日期(to_date)select to_date('2009-07-31','yyyy-mm-dd')from dual;TO_DATE('2009---------------31-7月-09

? 算數(shù)運算

? 查詢每個員工的年收入

select empno,ename,(sal+comm)*12 from emp;年收入=工資+獎金

? 查詢每個員工的年收入

select empno,ename,(sal+comm)*12 income from emp;

? 查詢每個員工的年收入

select empno,ename,(sal+NVL(comm,0))*12 income from emp;注:NVL(comm,0),當comm的值為null時,用0替換

ORACLE_多表查詢

? 格式:

select 列名1 別名1,......from 表名1,表名2,......where 條件 order by 列名

? 查詢員工的編號,姓名,部門編號,部門名稱

select empno,ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno;

關聯(lián)查詢-為表命別名

? 查詢員工的編號,姓名,部門編號,部門名稱

select empno,ename,e.deptno,dname from emp e,dept d where d.deptno=e.deptno;注:這里的e是emp的別名,d是dept的別名

關聯(lián)查詢-自連接

? 查詢出每個雇員的姓名、工作、雇員的直接上級領導的姓名

select e.empno,e.ename,e.job,m.ename mname from emp e,emp m where e.mgr=m.empno;注:mname是m.ename的別名

關聯(lián)查詢-多表關聯(lián)

四、? 查詢出每個雇員的姓名,工作,雇員的直接上級領導,以及部門名稱 select e.ename,e.job,m.ename,d.dname from emp e,dept d,emp m where e.mgr=m.empno and e.deptno=d.deptno;注:當查詢的字段間的關系涉及到n個表時,則n個表之間關聯(lián)。

左、右外連接

? 查詢員工編號,姓名,所在部門號,部門名稱,將沒有員工的部門也顯示出來 select e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno;注:(+)在左邊,表示右連接,會列出所有右表中出現(xiàn)但是沒有在左表中出現(xiàn)的行。

? 查詢雇員的編號,姓名及其領導的編號,將沒有領導的員工也列出來 select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr=m.empno(+);注:(+)在右邊表示左連接,會列出左表中出現(xiàn)但沒有在右表中出現(xiàn)的行。

? 交叉連接(cross join):用來長生笛卡爾積 select * from emp cross join dept;

? 自然連接(nutural join):自動進行關聯(lián)字段的匹配 select * from emp natural join dept;

? using子句:直接指定操作關聯(lián)列

select * from emp join dept using(deptno)

? on子句:用戶自己編寫連接條件

select * from emp join dept on emp.deptno=dept.deptno;

? left join:左外連接

? right join:右外連接

五、ORACLE_列函數(shù)和分組

? 常用的列函數(shù)

sum(expression)求和 max(expression)求最大值 min(expression)求最小值 avg(expression)求平均數(shù) count(expression)統(tǒng)計記錄數(shù)

count(distinct colname)統(tǒng)計去除重復行記錄數(shù) nvl(comm,0)當comm為null時,用0替換

列函數(shù)的使用

? 查詢員工的記錄數(shù),員工工資的總和,平均工資,最高工資,最低工資

select count(*)count_emp,sum(sal)sum_sal, max(sal)max_sal,min(sal)min_sal, avg(sal)avg_sal from emp;

列函數(shù)的使用-對null的處理

? 查詢所有員工的年收入

select sum(sal+comm)from emp;SUM(SAL+COMM)-------------

7800 注:當comm為null時,sal+comm是沒有結果值的

select sum(sal)+sum(comm)from emp;SUM(SAL)+SUM(COMM)------------------

31225

select sum(sal+nvl(comm,0))from emp;SUM(SAL+NVL(COMM,0))--------------------

31225

? 分組查詢

語法格式

select 列名...,列函數(shù) from 表名...where 條件...group by 列名...order by 列名...? 查詢每個部門的人數(shù)

select deptno,count(*)from emp group by deptno;規(guī)則:如果在select字句中,有不在列函數(shù)中的列,則該列一定要出現(xiàn)在group by之后。

分組查詢having字句的使用

? 顯示出平均工資大于2000的部門編號和平均工資 select deptno,avg(sal)from emp group by deptno having avg(sal)>2000;

SQL語句的書寫順序

select 列名,列函數(shù) from 表名 where 條件 group by列名 having 條件 order by 列名

SQL語句的執(zhí)行順序

from where group by having select order by

? 查詢20,30部門的平均工資,并將平均工資大于2000的輸出,輸出結果按平均工資排序 select deptno,avg(sal)from emp where deptno in(20,30)group by deptno having avg(sal)>2000 order by avg(sal);

六、ORACLE_子查詢

在where子句中使用子查詢

? 查詢工資比7654雇員工資高的全部雇員信息

select * from emp where sal>(select sal from emp where empno=7654);子查詢-in的使用

? 查詢和smith或jones在同一部門,同一職位工作的員工

select ename from emp where(deptno,job)in(select deptno,job from emp where ename in('SMITH','JONES'));

子查詢-any的使用

? =any:與in操作符的效果一致

查詢和smith或jones在同一部門,同一職位工作的員工

select ename from emp where(deptno,job)=any(select deptno,job from emp where ename in('SMITH','JONES'));

? >any:只要大于子查詢中的任何一個值即可 select * from emp where sal>any(select min(sal)from emp group by deptno);

?

select empno from emp where sal

子查詢all的使用

? >all:比最大的值大

select * from emp where sal>all

(select min(sal)from emp group by deptno);注:select min(sal)from emp group by deptno結果為

MIN(SAL)----------

950

800

1300 是每個部門當中的最少工資。

?

七、ORACLE_表的更新操作

? 創(chuàng)建表副本

create table myemp as select * from emp;

? 插入 ? 到表中 insert的語法

insert into 表名(字段名1,字段名2,......)values(值1,值2......)

? 為myemp中增加一條記錄 insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7899,'張三','清潔工','7369','14-2月-2005',9000,300,40);注:給定的值要和指定的字段數(shù)一致。

1.如果全部字段都插入值的話,那字段名可以省略。即:

insert into 表名 values(值1,值2,.......);2.如果只是部分字段插入值的話,字段名又想省略的話,那么,其余沒有數(shù)據(jù)插入的字段用null填補。

? to_date:字符型轉(zhuǎn)換成日期型

? 批量插入記錄 格式:

insert into 表名

select 字段列表 from 表名 where 條件

注:insert表和select表列數(shù)等都一致 例如:

create table test as select * from emp;insert into test select * from emp;

? 修改記錄

update表名set要修改的字段=新值,要修改的字段=新值,...where條件

? 將雇員號為7896的雇員的獎金修改為100 update myemp set comm=100 where empno=7896;注:執(zhí)行修改操作時,一定要使用where來指定修改的條件,否則會改變表中的所有記錄。

? 刪除記錄

delete from 表名 where 條件

? 刪除雇員編號為7896的雇員信息 delete from myemp where empno=7896;注:執(zhí)行delete操作時,一定要使用where來指定修改的條件,否則會刪除表中所有的記錄。

? Oralce的事務處理

commit:提交事務 rollback:回滾操作

注:操作一旦執(zhí)行了commit操作,就再也不能回滾操作了。

八、ORACLE_表與視圖的管理

? oracle中的常見數(shù)據(jù)類型

varchar、varchar2:表示一個字符串,有長度限制,為255 number:

number(n):表示一個整數(shù),數(shù)字的長度是n,可以使用int number(n,m):表示一個小數(shù),數(shù)字的長度為n,整數(shù)長度m-n,可以使用float date:表示日期類型,日期要按照標準格式日期存放。clob:大對象,表示大文本數(shù)據(jù)類型,可存放4G。

blob:大對象,表示二進制數(shù)據(jù),最大可以存放4G,如電影,圖片、歌曲

? 創(chuàng)建表 語法:

create table 表名(字段名稱1 字段類型[default 默認值], 字段名稱1 字段類型[default 默認值],............字段名稱1 字段類型[default 默認值],);

? 復制表

create table 表名 as(子查詢);注:當子查詢不成立時,如果1=2,則只復制表的結果,不復制表的數(shù)據(jù)。

? 刪除表 語法:

drop table 表名;

? 修改表結構

? 增加一列

alter table 表名 add(列名稱 列數(shù)據(jù)類型 default 默認值)

? 刪除列 alter table 表名 drop column 列名稱;

? 修改列的數(shù)據(jù)類型

alter table 表名稱 modify(列的名稱 列的類型 default 默認值);注:1.如果是更改數(shù)據(jù)的長度,則要求更改時,長度不能小于當前表中數(shù)據(jù)所具有的最大長度。

2.如果是更改數(shù)據(jù)類型,則要求更改時,該列的所有記錄值都為空。

? 修改表結構

? 為表重命名

rename 舊表名 to 新表名;注:這是oracle特有的操作

? 將myemp表改名為iemp SQL> rename myemp to iemp;表已重命名。? 截斷表

truncate table 表名;意義:清空表中的所有數(shù)據(jù),并且立即釋放資源,該操作是不可回滾。

? 約束-約束的分類

主鍵約束:表示一個唯一的標識,本身不能為空 唯一約束:列值不允許重復

檢查約束:檢查一個列的內(nèi)容是否合法

非空約束:不能為空值,如用戶不能為空(no null)外鍵約束:在兩張表中進行約束的操作

? 主鍵約束(primary key)主鍵約束一般在id上使用,而且本身已經(jīng)默認了不能為空,主鍵約束可以在建表的時候指定 create table person(pid varchar2(18)primary key, name varchar(30), age number(3), sex varchar2(2)default'男');

使用constraint指定

constraint [k?n'streint] 約束;強制 create table person(pid varchar2(18), name varchar(30), age number(3), sex varchar2(2)default'男'

constraint person_pid_pk primary key(pid););? 非空約束(not null)create table person(pid varchar2(18)primary key, name varchar(30)not null, age number(3), sex varchar2(2)default'男');

? 唯一約束(unique)create table person(pid varchar2(18)primary key, name varchar(30)unique not null, age number(3), sex varchar2(2)default'男');

? 視圖

概念:一個視圖實質(zhì)是封裝了一條復雜的SQL語句

? 創(chuàng)建視圖 語法:

create view 視圖名稱 as 子查詢

? 創(chuàng)建部門20員工的雇員信息

create view empv20 as select * from emp where deptno=20;注:當創(chuàng)建視圖以后,可以像操作表一樣操作視圖。注:視圖的操作會影響到表的操作。

with check option 不能更新創(chuàng)建視圖的條件 with read only 創(chuàng)建只讀視圖

? 刪除視圖 語法:

drop view 視圖名稱

注:當刪除視圖所在的表時,則視圖也不能被使用

? 序列

創(chuàng)建序列語法:sequence ['si:kw?ns] create sequence 序列名稱;create sequence myseq;序列的操作:

nextval:取得序列的下一個內(nèi)容 currval:取得當前序列的內(nèi)容

? 創(chuàng)建表驗證序列的操作

create table testseq(next number,curr number);insert into testseq values(myseq.currval,myseq.nextval);

? 創(chuàng)建序列指定每次增長的增量

create sequence myseq increment by 2;注:每次增長2

? 創(chuàng)建序列指定開始的序列,默認的序列從1開始。create sequence myseq increment by 2 start with 10;注:序列從10開始,每次增長2

? 創(chuàng)建一個序列1,3,5,7,9.create sequence myseq maxvalue 9 increment by 2 start with 1 cache 2 cycle;注:序列從1開始,每次增長2,最大值為9,循環(huán)兩次。

第五篇:Oracle數(shù)據(jù)庫實驗報告

中南林業(yè)科技大學

實驗報告

課程名稱:

Oracle數(shù)據(jù)庫 專業(yè)班級: 姓名:

學號:

****年**月**日

實驗一

安裝和使用Oracle數(shù)據(jù)庫

【實驗目的】

1.掌握Oracle軟件安裝過程,選擇安裝組件 2.掌握建立Oracle數(shù)據(jù)庫,配置網(wǎng)絡連接 3.掌握Oracle企業(yè)管理器的基本操作 4.使用SQL*Plus,登錄到實例和數(shù)據(jù)庫 5.掌握命令方式的關閉和啟動實例及數(shù)據(jù)庫 【實驗內(nèi)容】

1.查看已安裝的Oracle組件

2.查看服務,記錄下和數(shù)據(jù)庫有關的服務名,將他們設為手動方式,啟動相關服務。

3.配置監(jiān)聽器,查看是否在服務中有LISTENER,是否能啟動。4.配置本地net服務,提示:設置正確的服務器地址和端口號。5.打開SQL*Plus,用SYS和SYSTEM用戶名和密碼登錄。6.思考題:有幾種打開SQL*Plus的方法?分別是什么? 7.用命令關閉實例和數(shù)據(jù)庫,記錄命令

8.用命令以NOMOUNT的方式啟動實例,再加載數(shù)據(jù)庫,打開數(shù)據(jù)庫。

【實驗結論】

1.查看已安裝的Oracle組件

2.查看服務,記錄下和數(shù)據(jù)庫有關的服務名,將他們設為手動方式,啟動相關服務。

3.配置監(jiān)聽器,查看是否在服務中有LISTENER,是否能啟動。

4.配置本地net服務,提示:設置正確的服務器地址和端口號。

5.打開SQL*Plus,用SYS和SYSTEM用戶名和密碼登錄。

6.思考題:有幾種打開SQL*Plus的方法?分別是什么?(1)直接打開 sql plus 即窗口方式(2)cmd 命令行方式

(3)WEB 頁面中 iSQL*Plus 方式 7.用命令關閉實例和數(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.初始化文件有幾種?默認的保存位置在哪里?

初始化文件有三種:數(shù)據(jù)文件,日志文件,控制文件; 默認的保存位置E:oracleproduct10.2.0oradataorcl

4.打開OEM,查看三類物理文件信息

三類物理文件:數(shù)據(jù)文件、控制文件、日志文件 數(shù)據(jù)文件:.DBF存儲表、索引及數(shù)據(jù)結構信息

日志文件:.LOG記錄對數(shù)據(jù)庫的所有修改信息,用于恢復

控制文件:.CTL二進制文件,記錄數(shù)據(jù)庫名、文件標識、檢查點

5.分別用select命令查詢V$parameter動態(tài)性能視圖,用show命令查看全局數(shù)據(jù)庫名、實例名、是否啟動自動歸檔、標準數(shù)據(jù)塊大小這四個參數(shù)的值,記錄命令和結果。用select命令查詢V$parameter動態(tài)性能視圖

用show命令查看全局數(shù)據(jù)庫名、實例名

用show命令查看是否啟動自動歸檔、標準數(shù)據(jù)塊大小

6.如何用命令查看數(shù)據(jù)文件、控制文件的文件名、存儲位置和狀態(tài)信息?

(1).查看數(shù)據(jù)文件的文件名、存儲位置和狀態(tài)信息

(2).查看控制文件的文件名、存儲位置和狀態(tài)信息

0

和服務器型文件都要找到),查看各類默認位置并記錄下來(包括物理文件所在目錄,該數(shù)據(jù)庫相關的各個目錄等),登錄到mydb數(shù)據(jù)庫。

2.用命令方式手工創(chuàng)建數(shù)據(jù)庫testorcl

(1)創(chuàng)建批處理文件,建立必需的各級目錄,參考第一題MYDB數(shù)據(jù)庫的默認目錄。

(4)運行數(shù)據(jù)庫建立腳本,更改相關服務為手動啟動方式

(5)運行數(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

二、完成下面的查詢,記錄查詢命令和結果。1.查詢HR方案種有哪些表,列出表名 2.設置行寬為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)理的員工編號、姓名、薪水、部門號。

【實驗結論】

一、需要訪問HR示例方案中的表,如果機器上沒有該示例方案,則運行相關包和相應配置裝入HR方案。

1.將hr.rar解壓到D:oracleproduct10.2.0db_2demoschema human_resources目錄下,然后在SQL*PLUS 中執(zhí)行 hr_main.sql

二、完成下面的查詢,記錄查詢命令和結果。1.查詢HR方案種有哪些表,列出表名

5.查詢first_name的第三個字母是t的員工編號,first_name,電話號碼,部門編號,部門名稱

738

實驗五

PL/SQL編程

【實驗目的】

1.熟悉PL/SQL的數(shù)據(jù)類型和書寫規(guī)則 2.熟悉控制結構和游標的使用 3.編寫和運行函數(shù)、過程和觸發(fā)器 【實驗內(nèi)容】

編寫腳本文件,調(diào)試運行腳本文件,并記錄結果。

1.在SQL*Plus中編寫一個PL/SQL塊,功能用于打印學生信息 在DECLARE部分完成:

(2)建立學生信息記錄類型stu_record_type,包括學號,姓名,性別,籍貫,學習成績和活動成績。均為可變長字符類型(3)編寫本地子過程:學生信息打印過程PrintStuRecord,把(1)中定義的記錄類型作為參數(shù)(4)定義學生信息記錄變量stu_record 在BEGIN…END部分完成:

(1)為stu_record變量的各個元素賦值如下: 學號:‘2001001’ 姓名:’李新’

性別:‘m’

籍貫:‘黑龍江省哈爾濱市’ 學習成績:‘Excellent’

0

(1)建立學生信息記錄類型stu_record_type,包括學號,姓名,性別,籍貫,學習成績和活動成績。均為可變長字符類型

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)編寫本地子過程:學生信息打印過程PrintStuRecord,把中定義的記錄類型作為參數(shù)

procedure PrintStuRecord as begin dbms_output.put_line('學號:'|| 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('學習成績:'|| stu_record.s_studyscore);dbms_output.put_line('活動成績:'|| stu_record.s_activescore);end PrintStuRecord;(3)定義學生信息記錄變量stu_record stu_record stu_record_type;在BEGIN…END部分完成:

(4)為stu_record變量的各個元素賦值如下: 學號:‘2001001’ 姓名:’李新’

性別:‘m’

籍貫:‘黑龍江省哈爾濱市’

2.建立對bookinfo表的DML觸發(fā)器,一旦bookinfo表發(fā)生了任何變化,立即觸發(fā),對bookinfo表的數(shù)據(jù)進行統(tǒng)計,結果存儲在數(shù)據(jù)統(tǒng)計表中

(1)如果沒有則建立bookinfo表,選擇建立在scott用戶下,表結構為(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

實驗六

模式對象管理與安全管理

【實驗目的】

1.了解模式對象的類型

2.掌握在OEM中操作模式對象的方法

3.掌握命令方式建立表、視圖、索引等常見對象的方法 4.熟悉Oracle中權限分類和設置,理解系統(tǒng)提供用戶的角色和權限

5.熟練使用建立用戶、角色,為用戶授權、授予角色的命令

【實驗內(nèi)容】

1.創(chuàng)建一個TESTUSET用戶,密碼為test,默認表空間為user表空間

2.創(chuàng)建用戶后為其授予登錄數(shù)據(jù)庫和創(chuàng)建數(shù)據(jù)庫對象的權限 3.用TESTUSER用戶登錄數(shù)據(jù)庫

4.創(chuàng)建學生信息表(學號,姓名,性別,入學成績),定義主鍵和輸入數(shù)據(jù)(至少5條數(shù)據(jù)),提交添加的數(shù)據(jù)。并完成下面的題目:

(1)再繼續(xù)添加2條數(shù)據(jù),設置一個保存點savepoint,再添加1條數(shù)據(jù),執(zhí)行回退到保存點的回退命令。查看此時表中數(shù)據(jù)(2)查詢?nèi)雽W成績大于480的學生信息(3)建立男生信息視圖

(4)在“成績”字段上建立B-樹索引

5.創(chuàng)建一個表簇,名為empl_dep,容納empl表和dep表,有公

下載Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結word格式文檔
下載Oracle數(shù)據(jù)庫學習中的六條經(jīng)驗總結.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發(fā)現(xiàn)有涉嫌版權的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權內(nèi)容。

相關范文推薦

    ORACLE數(shù)據(jù)庫學習心得大全

    ORACLE數(shù)據(jù)庫結課論文 一個好的程序,必然聯(lián)系著一個龐大的數(shù)據(jù)庫網(wǎng)路... 今年我們學習了 oracle數(shù)據(jù)庫這門課程,起初的我,對這個字眼是要多陌生有多陌生,后來上課的時候聽一會......

    Oracle數(shù)據(jù)庫總結范文

    創(chuàng)建表及命名規(guī)則? 表名和列名: 必須以字母開頭 必須在1–30個字符之間 必須只能包含A–Z, a–z, 0–9, _, $, 和# 必須不能和用戶定義的其他對象重名 必須不能是Oracle 的保......

    ORACLE數(shù)據(jù)庫工作總結

    2014-2015學年度第一學期ORACLE教學工作總結 班級:13高軟班 數(shù)據(jù)庫技術是計算機科學技術中發(fā)展最快的領域之一,也是應用最為廣泛的技術之一,它已經(jīng)成為計算機信息系統(tǒng)與應用的......

    學習oracle數(shù)據(jù)庫的總結(圖文整理)(定稿)

    1、在開發(fā)環(huán)境中連接到數(shù)據(jù)庫,進行基本的select查詢操作; 2、熟悉plsql的使用; 3、熟悉sqlplus相關命令(登錄、查詢、導入導出等) 登錄sqlplus: 第一:使用dos窗口登錄sqlplus Sqlp......

    Oracle數(shù)據(jù)庫使用心得

    Oracle數(shù)據(jù)庫使用心得 092909 謝弘毅 經(jīng)過助教對oracle和sybase數(shù)據(jù)庫的講解后,我下載使用和體驗了這兩個數(shù)據(jù)庫,但主要的還是使用了Oracle數(shù)據(jù)庫,經(jīng)過一段時間的使用,對其使用......

    Oracle數(shù)據(jù)庫 知識點總結

    1.constraint約束: alter table [table_name] add constraint [pk_name] primary key(pkname);//添加主鍵 alter table [table_name] drop constraint [pk_name];//刪除主鍵......

    Oracle數(shù)據(jù)庫心得體會(含五篇)

    學習Oracle數(shù)據(jù)庫的心得體會 對于學習Oracle數(shù)據(jù)庫,應該先要了解Oracle的框架。它有物理結構(由控制文件、數(shù)據(jù)文件、重做日志文件、參數(shù)文件、歸檔文件、密碼文件組成),邏輯結......

    oracle數(shù)據(jù)庫自動備份方案

    1. 目的 編寫本文檔的目的為實現(xiàn)ORACLE數(shù)據(jù)庫的自動備份,為不動產(chǎn)數(shù)據(jù)增加一份數(shù)據(jù)安全按保障。 2. 軟件環(huán)境 數(shù)據(jù)庫服務器:oracle 11g atabase x64 v11.2.0.4.0 客戶端:Oracle......

主站蜘蛛池模板: 国产拍揄自揄精品视频| 国产精品内射后入合集| 久热这里只有精品视频6| 特级毛片a级毛片免费播放| 无码国产69精品久久久久网站| 国产无套内射久久久国产| 夫前人妻被灌醉侵犯在线| 玩弄白嫩少妇xxxxx性| 午夜理论片yy6080私人影院| 少妇私密会所按摩到高潮呻吟| 天堂网在线观看| 狠狠做五月深爱婷婷| 青青草99久久精品国产综合| 亚洲成l人在线观看线路| 午夜伦费影视在线观看| 九九99热久久精品离线6| 日韩一区二区三区射精-百度| 日韩免费无码成人久久久久久片| 丰满人妻在公车被猛烈进入电影| 国产女人高潮叫床视频| 天堂а√8在线最新版在线| 欧美交a欧美精品喷水| 在线亚洲视频网站www色| 亚洲日本乱码一区二区在线二产线| 西西人体大胆瓣开下部自慰| 国产精品第一区揄拍| 国产免费一区二区三区免费视频| 亚洲视频高清不卡在线观看| 宅宅午夜无码一区二区三区| 精品人妻系列无码专区| 成人片黄网站色大片免费观看cn| 亚洲av无码久久| 亚洲欧洲国产码专区在线观看| 四川丰满少妇被弄到高潮| 国产极品久久久久久久久| 婷婷综合缴情亚洲| 成人免费午夜无码视频在线播放| 无码精品人妻一区二区三区中| 欧美激情一区二区三区在线| 久久久久国色av∨免费看| 久久精品国产亚洲77777|