Oracle經(jīng)典教程_第1頁
Oracle經(jīng)典教程_第2頁
Oracle經(jīng)典教程_第3頁
Oracle經(jīng)典教程_第4頁
Oracle經(jīng)典教程_第5頁
已閱讀5頁,還剩130頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、走進Oracle21.Oracle簡介32.Oracle安裝43.Oracle客戶端工具94.Oracle服務165.Oracle啟動和關閉176.Oracle用戶和權限187.本章總結218.本章練習22SQL數(shù)據(jù)操作和查詢251.SQL簡介262.Oracle數(shù)據(jù)類型263.創(chuàng)建表和約束274.數(shù)據(jù)操縱語言(DML)305.操作符356.高級查詢367.本章總結448.本章練習45子查詢和常用函數(shù)481.子查詢492.Oracle中的偽列513.Oracle函數(shù)544.本章總結625.本章練習63表空間、數(shù)據(jù)庫對象661.Oracle數(shù)據(jù)庫對象672.同義詞673.序列704.視圖725.

2、索引746.表空間757.本章總結798.本章練習80PL/SQL程序設計831.PL/SQL簡介842.PL/SQL塊853.PL/SQL數(shù)據(jù)類型894.PL/SQL條件控制和循環(huán)控制915.PL/SQL中動態(tài)執(zhí)行SQL語句1016.PL/SQL的異常處理1027.本章總結1088.本章練習109Oracle應用于.Net平臺1111.回顧ADO.NET1122.使用ADO.NET連接Oracle1133.抽象工廠中加入Oracle1174.本章總結1215.本章練習122數(shù)據(jù)庫導入導出1241.Oracle導入導出1252.EXP導出數(shù)據(jù)1253.IMP導入1284.常見問題128第1章走

3、進Oracle主要內容ü Oracle安裝ü Oracle創(chuàng)建用戶和角色ü 客戶端鏈接Oracle服務器1. Oracle簡介在第一學期我們已經(jīng)接觸過關系型數(shù)據(jù)庫SQL Server,對數(shù)據(jù)庫、表、記錄、表的增刪改查操作等這些基本的概念已經(jīng)了解。Oracle是基于對象的關系型數(shù)據(jù)庫,Oracle也是用表的形式對數(shù)據(jù)存儲和管理,并且在Oracle的操作中添加了一些面向對象的思想。Oracle數(shù)據(jù)庫是Oracle(中文名稱叫甲骨文)公司的核心產(chǎn)品,Oracle數(shù)據(jù)庫是一個適合于大中型企業(yè)的數(shù)據(jù)庫管理系統(tǒng)。在所有的數(shù)據(jù)庫管理系統(tǒng)中(比如:微軟的SQL Server,IB

4、M的DB2等),Oracle的主要用戶涉及面非常廣,包括:銀行、電信、移動通信、航空、保險、金融、電子商務和跨國公司等。Oracle產(chǎn)品是免費的,可以在Oracle官方網(wǎng)站上下載到安裝包,另一方面Oracle服務是收費的。Oracle公司成立以來,從最初的數(shù)據(jù)庫版本到Oracle7、Oracle8i、Oracle9i,Oracle10g到Oracle11g,雖然每一個版本之間的操作都存在一定的差別,但是Oracle對數(shù)據(jù)的操作基本上都遵循SQL標準。因此對Oracle開發(fā)來說版本之間的差別不大。 很多人沒有學習Oracle就開始發(fā)怵,因為人們在誤解Oracle,認為Oracle太難學了,認為O

5、racle不是一般人用的數(shù)據(jù)庫,其實任何數(shù)據(jù)庫對應用程序研發(fā)人員來說,都是大同小異,因為目前多數(shù)數(shù)據(jù)庫都支持標準的SQL。在Oracle這本書中,我們能學習到:Ø Oracle的安裝Ø Oracle數(shù)據(jù)管理Ø 常用子查詢及常用函數(shù)Ø PL/SQL編程Ø Oracle基本管理由于在第一學期已經(jīng)接觸了SQL Server,Oracle數(shù)據(jù)庫的概念不是很難,主要是實踐,因此在本書的學習中,認真的完成上機練習是學習好本書的關鍵。接下來我們先從Oracle安裝開始,接觸一些Oracle中基本的概念。2. Oracle安裝Oracle數(shù)據(jù)庫產(chǎn)品是免費的,我

6、們可以從Oracle的官方網(wǎng)站()下載到程序安裝包,Oracle在Windows下的安裝非常方便,安裝開始后,一直點擊安裝程序的“下一步”即可。1. 下載Oracle10g后,解壓到一個文件夾下,單擊“setup.exe”文件即可啟動安裝界面。如下圖:圖1 Oracle安裝啟動界面Oracle主目錄位置就是Oracle準備安裝的位置,稱為“Oracle_Home”,一般Oracle根據(jù)當前計算機的硬盤大小默認給出一個合適的位置。Oracle安裝時可以只安裝Oracle軟件,然后單獨創(chuàng)建數(shù)據(jù)庫,也可以在上圖中選中“創(chuàng)建啟動數(shù)據(jù)庫”復選框,在安裝Oracle產(chǎn)品時,同時創(chuàng)建一個數(shù)據(jù)庫,對初學者來說

7、,推薦這樣安裝。填寫全局數(shù)據(jù)庫名,以及管理員的密碼。全局數(shù)據(jù)庫名是數(shù)據(jù)庫在服務器網(wǎng)絡中的唯一標識。2. 點擊“下一步”,就會出現(xiàn)如下圖內容,開始對Oracle服務器進行環(huán)境檢查,主要查看服務器是否符合Oracle安裝的條件,比如操作系統(tǒng)是否支持、系統(tǒng)內存是否符合Oracle安裝的最低要求等。圖2 Oracle安裝前環(huán)境檢查3. Oracle檢查通過后,單擊“下一步”,就會列出所有安裝Oracle過程中的默認選項。圖3 Oracle默認安裝設置4. 單擊“安裝”按鈕,進入安裝界面,這一過程經(jīng)歷時間比較長,根據(jù)計算機的性能不同有很大差別。圖4 Oracle安裝5. 上圖完成后,進入了各種Oracl

8、e工具的安裝階段,包括網(wǎng)絡配置向導,iSQL*plus等(后面課程中講解)。如下圖所示:圖5 Oracle各種工具的安裝6. 接下來自動啟動DBCA(Database Configuration Assistant)進入創(chuàng)建默認數(shù)據(jù)庫階段。圖6 DBCA下安裝數(shù)據(jù)庫Oracle中的數(shù)據(jù)庫主要是指存放數(shù)據(jù)的文件,這些文件在Oracle安裝完成后,在計算機硬盤上都能找到,包括數(shù)據(jù)文件、控制文件和數(shù)據(jù)庫日志文件。數(shù)據(jù)庫創(chuàng)建后會有一系列為該數(shù)據(jù)庫提供服務的內存空間和后臺進程,稱為該數(shù)據(jù)庫的實例。每一個數(shù)據(jù)庫至少會有一個實例為其服務。實例中的內存結構稱為系統(tǒng)全局區(qū)(SGA),系統(tǒng)會根據(jù)當前計算機系統(tǒng)的性

9、能給SGA分配非常可觀的內存空間。Oracle創(chuàng)建數(shù)據(jù)庫不能像SQL Server那樣用一個簡單的CREATE DATABASE命令就能完成,在創(chuàng)建數(shù)據(jù)庫的過程中還需要配置各種參數(shù)。雖然有DBCA工具向導,但是仍然需要進行比較麻煩的配置。雖然一個Oracle數(shù)據(jù)庫服務器中可以安裝多個數(shù)據(jù)庫,但是一個數(shù)據(jù)庫需要占用非常大的內存空間,因此一般一個服務器只安裝一個數(shù)據(jù)庫。每一個數(shù)據(jù)庫可以有很多用戶,不同的用戶擁有自己的數(shù)據(jù)庫對象(比如:數(shù)據(jù)庫表),一個用戶如果訪問其他用戶的數(shù)據(jù)庫對象,必須由對方用戶授予一定的權限。不同的用戶創(chuàng)建的表,只能被當前用戶訪問。因此在Oracle開發(fā)中,不同的應用程序只需使

10、用不同的用戶訪問即可。7. 數(shù)據(jù)庫創(chuàng)建完畢后,需要設置數(shù)據(jù)庫的默認用戶。Oracle中為管理員預置了兩個用戶分別是SYS和SYSTEM。同時Oracle為程序測試提供了一個普通用戶scott,口令管理中,可以對數(shù)據(jù)庫用戶設置密碼,設置是否鎖定。 Oracle客戶端使用用戶名和密碼登錄Oracle系統(tǒng)后才能對數(shù)據(jù)庫操作。圖7 DBCA下的口令管理圖8 為system,sys,scott用戶設置密碼默認的用戶中,SYS和SYSTEM用戶是沒有鎖定的,安裝成功后可以直接使用,SCOTT用戶默認為鎖定狀態(tài),因此不能直接使用,需要把SCOTT用戶設定為非鎖定狀態(tài)才能正常使用。這一步完成后,Oracle系

11、統(tǒng)安裝成功。Oracle數(shù)據(jù)庫中,默認情況下,所有系統(tǒng)的數(shù)據(jù),SQL關鍵字等都是大寫的,在操作過程中,Oracle會自動把這些內容轉換為大寫,因此用戶操作時不需考慮大小寫問題,一般情況下,為了良好的程序風格,程序中建議關鍵字用大寫,非關鍵字可以使用小寫。3. Oracle客戶端工具Oracle服務器安裝成功后,就可以通過客戶端工具連接Oracle服務器了,可以到Oracle官方下載Oracle專用的客戶端軟件,大多客戶端工具都是基于Oracle客戶端軟件的。接下來介紹幾種常用的Oracle客戶端工具。² SQL*Plus工具該工具是Oracle系統(tǒng)默認安裝下,自帶的一個客戶端工具。在

12、Windows命令行中輸入“sqlplusw”命令,就能夠啟動該工具了。圖9 SQL*Plus工具輸入用戶名和密碼后,如果SQL*Plus與數(shù)據(jù)庫服務器在同一臺計算機上,并且當前服務器下只有一個數(shù)據(jù)庫實例,那么“主機字符串”可以不用填寫。SQL*Plus工具雖然是Oracle自帶的工具,但是在現(xiàn)實開發(fā)中,基于該環(huán)境對開發(fā)不方便,因此很少使用。SQL*Plus連接成功后就如圖所示:圖10 SQL*Plus工具登錄后² SQL*Plus命令行工具該命令行工具,提供了與數(shù)據(jù)庫交互的能力和維護數(shù)據(jù)庫的能力,包括了Oracle自帶的SQL*Plus工具的全部功能,在Oracle管理中經(jīng)常使用。

13、在命令行中輸入:“sqlplus /nolog”即可啟動該工具。如下圖:圖11 啟動SQL*Plus命令行工具輸入“sqlplus /nolog”命令后,只是啟動了一個客戶端進程,并沒有與服務器連接,連接到Oracle服務器的命令是:conn 用戶名/密碼 as 連接身份服務器連接字符串說明:1. 連接身份:表示該用戶連接后擁有的權限。Ø sysdba: 即數(shù)據(jù)庫管理員,權限包括:打開數(shù)據(jù)庫服務器、關閉數(shù)據(jù)庫服務器、備份數(shù)據(jù)庫、恢復數(shù)據(jù)庫、日志歸檔、會話限制、管理功能、創(chuàng)建數(shù)據(jù)庫。sys用戶必須用sysdba身份才能登錄,system用戶可以用普通身份登錄。Ø sysyop

14、er:即數(shù)據(jù)庫操作員,權限包括:打開數(shù)據(jù)庫服務器、關閉數(shù)據(jù)庫服務器、備份數(shù)據(jù)庫、恢復數(shù)據(jù)庫、日志歸檔、會話限制。Ø normal:即普通用戶,權限只有查詢某些數(shù)據(jù)表的數(shù)據(jù)。默認的身份是normal用戶。2. 客戶端工具可以根據(jù)“服務器連接字符串”對服務器進行連接,有了連接字符串后客戶端就可以像操作本機一樣操作遠程數(shù)據(jù)庫,因此“服務器連接字符串”的配置也叫本地網(wǎng)絡服務配置,如果SQL*Plus工具啟動在服務器上,并且服務器上只有一個數(shù)據(jù)庫實例的情況下,連接字符串可以缺省,在連接字符串中包括連接服務器的協(xié)議,服務器的地址,服務器的端口等設置,Oracle服務名等,該配置文件在Oracle

15、安裝目錄下的: network/ADMIN/ tnsnames.ora。該文件是一個文本文件,用記事本打開后如下所示:圖12 服務器連接字符串配置² 配置本地網(wǎng)絡服務名本地網(wǎng)絡服務名,即客戶端與服務器的連接字符串,本地網(wǎng)絡服務名是客戶端的配置,Oracle客戶端安裝后,可以使用客戶端自帶的網(wǎng)絡配置向導(Net Configuration Assistant)進行配置:1. 啟動Net Configuration Assistant。選擇“本地Net服務名配置”選項。如下圖所示:圖13 啟動Net Configuration Assistant2. 選擇“下一步”,本步驟可以對本地網(wǎng)絡

16、服務名進行添加,刪除,測試是否正常連接等操作,選擇“添加”選項。圖14 Net Configuration Assistant3. 點擊“下一步”,填寫服務名,該服務名就是Oracle安裝時(圖1),為數(shù)據(jù)庫取的全局數(shù)據(jù)庫名。圖15 服務名配置4. 點擊“下一步”,選擇服務需要的協(xié)議,默認是TCP協(xié)議。推薦使用默認的TCP協(xié)議。圖16 選擇協(xié)議5. 點擊“下一步”,輸入主機名,主機名可以是計算機名稱,也可以是一個IP地址,主機如果是本機,可以使用本機計算機名稱、“l(fā)ocalhost”、“”、或者本機的IP地址。圖17 輸入主機名和端口6. 單擊“下一步”,選擇“是,進行測試”

17、選項。進入下圖界面。圖18 測試成功在測試時,默認采用的用戶名和密碼是system/manager進行測試,如果用戶system的密碼不是“manager”,有可能測試通不過,更改登錄后,輸入正確的用戶名和密碼后再進行測試即可。7. 測試成功后,單擊“下一步”,出現(xiàn)如下界面,這一步是為本地網(wǎng)絡服務命名,即圖12中的服務器連接字符串名。圖19 為網(wǎng)絡服務名命名點擊“下一步”,配置就完成了,進入tnsnames.ora文件中查看,就出現(xiàn)了如圖12中的內容。² PL/SQL Developer工具在實際Oracle開發(fā)中,經(jīng)常使用一個功能強大的第三方工具:“PL/SQL Developer

18、”工具。PL/SQL Developer基本上可以實現(xiàn)Oracle開發(fā)中的任何操作。它運行在客戶端時必須先安裝Oracle客戶端,并且通過網(wǎng)絡配置向導配置網(wǎng)絡服務名后才能正常與服務器連接。圖20 PL/SQL Developer4. Oracle服務Oracle在windows中安裝完成后,會安裝很多服務,下面介紹幾個主要的服務。圖21 Oracle服務Ø OracleService+服務名,該服務是數(shù)據(jù)庫啟動的基礎,只有該服務啟動了,Oracle數(shù)據(jù)庫才能正常啟動。這是必須啟動的服務。Ø OracleOraDb10g_home1TNSListener,該服務是服務器端為客

19、戶端提供的監(jiān)聽服務,只有該服務在服務器上正常啟動,客戶端才能連接到服務器。該監(jiān)聽服務接收客戶端發(fā)出的請求,然后將請求傳遞給數(shù)據(jù)庫服務器。一旦建立了連接,客戶端和數(shù)據(jù)庫服務器就能直接通信了。Ø OracleOraDb10g_home1iSQL*Plus,該服務提供了用瀏覽器對數(shù)據(jù)庫中數(shù)據(jù)操作的方式。該服務啟動后,就可以使用瀏覽器進行遠程登錄并進行數(shù)據(jù)庫操作了。如下圖所示:圖22 iSQL*PlusØ OracleDBConsole+服務名,Oracle10g中的一個新服務。在Oracle9i之前,Oracle官方提供了一個基于圖形界面的企業(yè)管理器(EM),從Oracle10g

20、開始,Oracle提供了一個基于B/S的企業(yè)管理器,在操作系統(tǒng)的命令行中輸入命令:emctl start dbconsole,就可以啟動OracleDbConsole服務,如下圖所示:圖23 EM服務的啟動服務啟動之后,就可以在瀏覽器中輸入上圖中進入EM的地址,使用B/S方式管理Oracle服務器。5. Oracle啟動和關閉OracleService啟動動后,就可以對數(shù)據(jù)庫進行管理了,Oracle的啟動和關閉是最基本的命令,在SQL*Plus中,啟動Oracle必須是sys用戶,命令格式是:startup open圖24 Oracle服務啟動Oracle服務關閉用命令:shutdown im

21、mediate圖25 Oracle服務關閉6. Oracle用戶和權限Oracle中,一般不會輕易在一個服務器上創(chuàng)建多個數(shù)據(jù)庫,在一個數(shù)據(jù)庫中,不同的項目由不同的用戶訪問,每一個用戶擁有自身創(chuàng)建的數(shù)據(jù)庫對象,因此用戶的概念在Oracle中非常重要。Oracle的用戶可以用CREATE USER命令來創(chuàng)建。其語法是:語法結構:創(chuàng)建用戶CREATE USER 用戶名 IDENTIFIED BY 口令 ACCOUNT LOCK|UNLOCK語法解析:LOCK|UNLOCK創(chuàng)建用戶時是否鎖定,默認為鎖定狀態(tài)。鎖定的用戶無法正常的登錄進行數(shù)據(jù)庫操作。代碼演示:創(chuàng)建用戶SQL> CREATE USE

22、R jerry2 IDENTIFIED BY tom3 ACCOUNT UNLOCK;Oracle在SQL*Plus中的命令以分號(;)結尾,代表命令完畢并執(zhí)行,系統(tǒng)同時會把該命令保存在緩存中,緩存中只保存最近執(zhí)行過的命令,如果重新執(zhí)行緩存中的命令,直接使用左斜杠符號(/)。如果命令不以分號結尾,該命令只是寫入緩存保存起來,但并不執(zhí)行。盡管用戶成功創(chuàng)建,但是還不能正常的登錄Oracle數(shù)據(jù)庫系統(tǒng),因為該用戶還沒有任何權限。如果用戶能夠正常登錄,至少需要CREATE SESSION系統(tǒng)權限。Oracle用戶對數(shù)據(jù)庫管理或對象操作的權利,分為系統(tǒng)權限和數(shù)據(jù)庫對象權限。系統(tǒng)權限比如:CREATE S

23、ESSION,CREATE TABLE等,擁有系統(tǒng)權限的用戶,允許擁有相應的系統(tǒng)操作。數(shù)據(jù)庫對象權限,比如對表中的數(shù)據(jù)進行增刪改操作等,擁有數(shù)據(jù)庫對象權限的用戶可以對所擁有的對象進行對應的操作。還有一個概念就是數(shù)據(jù)庫角色(role),數(shù)據(jù)庫角色就是若干個系統(tǒng)權限的集合。下面介紹幾個常用角色:Ø CONNECT角色,主要應用在臨時用戶,特別是那些不需要建表的用戶,通常只賦予他們CONNECT role。CONNECT是使用Oracle的簡單權限,擁有CONNECT角色的用戶,可以與服務器建立連接會話(session,客戶端對服務器連接,稱為會話)。Ø RESOURCE角色,更

24、可靠和正式的數(shù)據(jù)庫用戶可以授予RESOURCE role。RESOURCE提供給用戶另外的權限以創(chuàng)建他們自己的表、序列、過程(procedure)、觸發(fā)器(trigger)、索引(index)等。Ø DBA角色,DBA role擁有所有的系統(tǒng)權限-包括無限制的空間限額和給其他用戶授予各種權限的能力。用戶SYSTEM擁有DBA角色。一般情況下,一個普通的用戶(如SCOTT),擁有CONNECT和RESOURCE兩個角色即可進行常規(guī)的數(shù)據(jù)庫開發(fā)工作。可以把某個權限授予某個角色,可以把權限、角色授予某個用戶。系統(tǒng)權限只能由DBA用戶授權,對象權限由擁有該對象的用戶授權,授權語法是: 語法結

25、構:授權GRANT角色|權限 TO 用戶(角色)代碼演示:授權SQL> GRANT CONNECT TO jerry;授權成功。SQL> GRANT RESOURCE TO jerry;授權成功。SQL>語法結構:其他操作/回收權限REVOKE 角色|權限 FROM 用戶(角色)/修改用戶的密碼ALTER USER 用戶名 IDENTIFIED BY 新密碼/修改用戶處于鎖定(非鎖定)狀態(tài)ALTER USER 用戶名 ACCOUNT LOCK|UNLOCK7. 本章總結Ø Oracle是基于對象的關系型數(shù)據(jù)庫,Oracle產(chǎn)品免費,服務收費。Ø Oracl

26、e安裝后默認會有兩個管理員用戶(system,sys)和一個普通用戶Scott。Ø Sql*plus是Oracle管理和數(shù)據(jù)操作的客戶端工具。Ø 客戶端鏈接服務器前,服務器要啟動監(jiān)聽服務,并且客戶端工具要安裝Oracle客戶端,并且在客戶端要建立本地網(wǎng)絡服務名。Ø Oracle服務和監(jiān)聽啟動后才能對數(shù)據(jù)庫進行操作。Ø 用startup命令啟動數(shù)據(jù)庫,用shutdown命令關閉數(shù)據(jù)庫。Ø Oracle的角色包括了一系列系統(tǒng)權限和普通對象權限,可以把權限授權給角色,把權限或者角色授權給用戶。8. 本章練習1. 描述Oracle安裝過程中的關鍵點。2

27、. 描述創(chuàng)建本地網(wǎng)絡服務名的步驟。3. 描述Oracle主要服務的作用。4. Oracle使用什么命令才能啟動和關閉。5. 什么是Oracle權限和角色?他們的關系是什么?6. 創(chuàng)建一個用戶,并授權CONNECT和RESOURCE。章節(jié)知識結構圖第2章SQL數(shù)據(jù)操作和查詢主要內容ü Oracle數(shù)據(jù)類型ü SQL建表和約束ü SQL對數(shù)據(jù)增刪改ü SQL查詢ü Oracle偽列1. SQL簡介在第一學期的SQL Server學習中,已經(jīng)知道,SQL是結構化查詢語言(Structured Query Language),專門用于數(shù)據(jù)存取、數(shù)據(jù)更新

28、及數(shù)據(jù)庫管理等操作。并且已經(jīng)學習了用SQL語句對數(shù)據(jù)庫的表進行增刪改查的操作。在Oracle開發(fā)中,客戶端把SQL語句發(fā)送給服務器,服務器對SQL語句進行編譯、執(zhí)行,把執(zhí)行的結果返回給客戶端。Oracle SQL語句由如下命令組成:Ø 數(shù)據(jù)定義語言(DDL),包括CREATE(創(chuàng)建)命令、ALTER(修改)命令、DROP(刪除)命令等。Ø 數(shù)據(jù)操縱語言(DML),包括INSERT(插入)命令、UPDATE(更新)命令、DELETE(刪除)命令、SELECT FOR UPDATE(查詢)等。Ø 數(shù)據(jù)查詢語言(DQL),包括基本查詢語句、Order By子句、Grou

29、p By子句等。Ø 事務控制語言(TCL),包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。Ø 數(shù)據(jù)控制語言(DCL),GRANT(授權)命令、REVOKE(撤銷)命令。目前主流的數(shù)據(jù)庫產(chǎn)品(比如:SQL Server、Oracle)都支持標準的SQL語句。數(shù)據(jù)定義語言,表的增刪改操作,數(shù)據(jù)的簡單查詢,事務的提交和回滾,權限的授權和撤銷等,Oracle與SQL Server在操作上基本一致。2. Oracle數(shù)據(jù)類型Oracle數(shù)據(jù)庫的核心是表,表中的列使用到的常見數(shù)據(jù)類型如下:類型含義CHAR(length)存儲固定長度的字符

30、串。參數(shù)length指定了長度,如果存儲的字符串長度小于length,用空格填充。默認長度是1,最長不超過2000字節(jié)。VARCHAR2(length)存儲可變長度的字符串。length指定了該字符串的最大長度。默認長度是1,最長不超過4000字符。NUMBER(p,s)既可以存儲浮點數(shù),也可以存儲整數(shù),p表示數(shù)字的最大位數(shù)(如果是小數(shù)包括整數(shù)部分和小數(shù)部分和小數(shù)點,p默認是38為),s是指小數(shù)位數(shù)。DATE存儲日期和時間,存儲紀元、4位年、月、日、時、分、秒,存儲時間從公元前4712年1月1日到公元后4712年12月31日。TIMESTAMP不但存儲日期的年月日,時分秒,以及秒后6位,同時包

31、含時區(qū)。CLOB存儲大的文本,比如存儲非結構化的XML文檔BLOB存儲二進制對象,如圖形、視頻、聲音等。表1 Oracle的部分數(shù)據(jù)類型對應NUMBER類型的示例:格式輸入的數(shù)字實際的存儲NUMBER1234.5671234.567NUMBER(6,2)123.4567123.46NUMBER(4,2)12345.67輸入的數(shù)字超過了所指定的精度,數(shù)據(jù)庫不能存儲表2 Number示例對于日期類型,可以使用sysdate內置函數(shù)可以獲取當前的系統(tǒng)日期和時間,返回DATE類型,用systimestamp函數(shù)可以返回當前日期、時間和時區(qū)。圖1 sysdate和sysTimestampOracle的查

32、詢中,必須使用“select 列 from 表”的完整語法,當查詢單行函數(shù)的時候,from后面使用DUAL表,dual表在系統(tǒng)中只有一行一列,該表在輸出單行函數(shù)時為了selectfrom的語法完整性而使用。3. 創(chuàng)建表和約束Oracle創(chuàng)建表同SQL Server一樣,使用CREATE TABLE命令來完成。創(chuàng)建約束則使用如下命令:語法格式:ALTER TABLE命令 ALTER TABLE 表名 ADD CONSTRAINT 約束名 約束內容。不論創(chuàng)建表還是約束,與SQL Server基本相同,注意:在Oracle中default是一個值,而SQL Server中default是一個約束,因

33、此Oracle的default設置可以在建表的時候創(chuàng)建。案例1:創(chuàng)建一個學生信息(INFOS)表和約束代碼演示:Oracle創(chuàng)建表和約束CREATE TABLE INFOS( STUID VARCHAR2(7) NOT NULL, -學號 學號=S+班號+2位序號 STUNAME VARCHAR2(10) NOT NULL, -姓名 GENDER VARCHAR2(2) NOT NULL, -性別 AGE NUMBER(2) NOT NULL, -年齡 SEAT NUMBER(2) NOT NULL, -座號 ENROLLDATE DATE, -入學時間 STUADDRESS VARCHAR2

34、(50) DEFAULT '地址不詳', -住址 CLASSNO VARCHAR2(4) NOT NULL -班號 班號=學期序號+班級序號 )/ ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER CHECK(GENDER = '男' OR GENDER = '女') /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT CHECK(S

35、EAT >=0 AND SEAT <=50) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE CHECK(AGE >=0 AND AGE<=100) /ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO CHECK(CLASSNO >='1001' AND CLASSNO<='1999') OR (CLASSNO >='2001' AND CLASSNO<='2999') /ALTER TA

36、BLE INFOS ADD CONSTRAINTS UN_STUNAME UNIQUE(STUNAME) /代碼解析: 在Oracle代碼中,“/”執(zhí)行緩存區(qū)中的語句,由于緩沖區(qū)中只存儲一條剛剛保存過語句,由于每條語句沒有用分號結尾,只是保存在緩沖區(qū),因此每條語句后面都有單獨一行“/”。 創(chuàng)建一個主鍵約束。 與 一起創(chuàng)建各種check約束。其中是唯一約束,表示該列值是唯一的,列中的值不能重復。Oracle中創(chuàng)建外鍵約束與SQL Server相同。比如:現(xiàn)有成績表定義如下:案例2:創(chuàng)建一個成績表(SCORES)表和約束代碼演示:Oracle創(chuàng)建表和約束CREATE TABLE SCORES( I

37、D NUMBER , -ID TERM VARCHAR2(2),-學期 S1或S2 STUID VARCHAR2(7) NOT NULL,-學號 EXAMNO VARCHAR2(7) NOT NULL,-考號 E+班號+序號 WRITTENSCORE NUMBER(4,1) NOT NULL,-筆試成績 LABSCORE NUMBER(4,1) NOT NULL-機試成績)ALTER TABLE SCORES ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')/ALTER TABLE SC

38、ORES ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID) /代碼解析: SQL Server中可以使用identify創(chuàng)建自動增長列,但是Oracle中的自動增長需要借助序列(Sequence)完成,在后面章節(jié)中講解。 Oracle中的外鍵約束定義。4. 數(shù)據(jù)操縱語言(DML)數(shù)據(jù)操縱語言(DML)用于對數(shù)據(jù)庫的表中數(shù)據(jù)進行添加、修改、刪除和SELECTFor UPDATE(后面專門學習該查詢)操作。對比一期學習過的SQL Server操作,接下來一一介紹在Oracle中的操作。&#

39、178; 簡單查詢數(shù)據(jù)查詢是用SELECT命令從數(shù)據(jù)庫的表中提取信息。SELECT語句的語法是:語法結構:簡單查詢SELECT *|列名|表達式 FROM 表名 WHERE 條件 ORDER BY 列名語法解析:1. *表示表中的所有列。2. 列名可以選擇若干個表中的列名,各個列表中間用逗號分隔。3. 表達式可以是列名、函數(shù)、常數(shù)等組成的表達式。4. WHERE子句是查詢的條件。5. ORDER BY 要求在查詢的結果中排序,默認是升序。圖2 數(shù)據(jù)查詢Oracle中可以把查詢的結果根據(jù)結果集中的表結構和數(shù)據(jù)形成一張新表。語法結構:根據(jù)結果集創(chuàng)建表CREATE TABLE 表名 AS SELEC

40、T語句代碼演示:根據(jù)結果集創(chuàng)建表SQL> CREATE TABLE INFOS1 AS SELECT * FROM INFOS; TABLE CREATED使用上面命令創(chuàng)建的新表中,不存在任何約束,并且把查詢的數(shù)據(jù)一起插入到新表中。如果只復制表結構,只需使查詢的條件不成立(比如where 1=2),就不會查詢從出任何數(shù)據(jù),從而復制一個表結構。代碼演示:復制表結構SQL> CREATE TABLE INFOS2 AS SELECT * FROM INFOS WHERE 1=2; TABLE CREATED² 數(shù)據(jù)插入用INSERT命令完成對數(shù)據(jù)的插入。語法結構:根據(jù)結果集創(chuàng)

41、建表INSERT INTO 表名(列名1,列名2) VALUES (值1,值2)語法解析:1. 列名可以省略。當省略列名時,默認是表中的所有列名,列名順序為表定義中列的先后順序。2. 值的數(shù)量和順序要與列名的數(shù)量和順序一致。值的類型與列名的類型一致。代碼演示:向INFOS表和SCORES表中插入數(shù)據(jù)SQL> INSERT INTO INFOS VALUES ( 2 's100102', '林沖', '男', 22, 2, 3 TO_DATE('2009-8-9 06:30:10',' YYYY-MM-DD HH24:

42、MI:SS '), 4 '西安', '1001' 5 ) 6 /1 row insertedSQL> INSERT INTO INFOS VALUES ('s100104','阮小二','男',26,3,SYSDATE,default,'1001'); 1 row insertedSQL>COMMIT; 代碼解析: 表名后面缺省了列名,默認是表Infos中的所有列名,values中的值要與表中列一一對應,包括順序和數(shù)據(jù)類型的對應。在SQL*Plus中一條語句可以寫在多行,那么從第

43、二行開始,sqlplus會為每一行前面給出行號。 在Oracle中,日期是國際化的,不同的區(qū)域安裝的數(shù)據(jù)庫,默認的日期格式不同,因此為了程序便于移植,日期的輸入要使用TO_DATE函數(shù)對日期格式化后輸入,采用格式化字符串對日期進行格式化時,格式化字符串中字符不區(qū)分大小寫,常見的格式化字符如下:1. yyyy表示四位年份2. mm表示兩位月份,比如3月表示為033. dd表示兩位日期4. hh24表示小時從0-23,hh12也表示小時從0-11。5. mi 表示分鐘6. ss表示秒 在遇到存在默認值的列時,可以使用default值代替。 commit是把用戶操作(添加、刪除、修改操作)提交,只有

44、提交操作后,數(shù)據(jù)才能真正更新到表中,否則其他用戶無法查詢到當前用戶操作的結果。在Oracle中,一個INSERT命令可以把一個結果集一次性插入到一張表中。使用的語句是:INSERT INTO 表 SELECT子句,如下示例:代碼演示:INSERT向表中插入一個結果集SQL> INSERT INTO INFOS2 SELECT * FROM INFOS; 5 rows inserted 在這種語法下,要求結果集中每一列的數(shù)據(jù)類型必須與表中的每一列的數(shù)據(jù)類型一致,結果集中的列的數(shù)量與表中的列的數(shù)量一致。比如表INFOS2,該表的結構與INFO表一樣,那么可以把INFO表中的所有記錄一次性插入

45、到INFOS2表中。Oracle的簡單查詢和SQL Server一樣都可以在查詢列中使用常量,如圖: 圖3 Select中的常量可以使用剛才的做法,把該結果集中的數(shù)據(jù)插入到表INFOS中。代碼演示:INSERT向表中插入一個常量結果集SQL> INSERT INTO INFOSSELECT 's100106','盧俊義','男',23,5, TO_DATE('2009-8-9 08:00:10','YYYY-MM-DD HH24:MI:SS'), '青龍寺','1001' FR

46、OM DUAL; 1 rows inserted SQL>COMMIT;² 更新數(shù)據(jù)Oracle在表中更新數(shù)據(jù)的語法是:語法結構:UPDATE操作UPDATE 表名 SET 列名1=值,列名2=值 WHERE 條件代碼演示:UPDATE操作SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山東萊蕪' WHERE STUNAME='阮小二' 1 rows updated SQL> commit;² 刪除數(shù)據(jù)Oracle在表中刪除數(shù)據(jù)的語法是:語法結構:DELETE

47、操作DELETE FROM表名 WHERE 條件代碼演示:DELETE操作SQL> DELETE FROM INFOS WHERE STUID='s100103' 1 ROW DELETED SQL> COMMIT;² TRUNCATE在數(shù)據(jù)庫操作中, TRUNCATE命令(是一個DDL命令)可以把表中的所有數(shù)據(jù)一次性全部刪除,語法是:語法結構:TRUNCATETRUNCATE TABLE 表名TRUNCATE和DELETE都能把表中的數(shù)據(jù)全部刪除,他們的區(qū)別是:1. TRUNCATE是DDL命令,刪除的數(shù)據(jù)不能恢復;DELETE命令是DML命令,刪除后的

48、數(shù)據(jù)可以通過日志文件恢復。2. 如果一個表中數(shù)據(jù)記錄很多,TRUNCATE相對DELETE速度快。由于TRUNCATE命令比較危險,因此在實際開發(fā)中,TRUNCATE命令慎用。Oracle默認安裝中,已經(jīng)創(chuàng)建了一個SCOTT用戶,默認密碼是:tiger,該用戶下有四張表分別是:雇員表(EMP),部門表(DEPT),工資登記表和獎金表,請參考本章后面的附表。接下來很多操作都是在該用戶下完成的。5. 操作符Oracle開發(fā)中,依然存在算術運算,關系運算,和邏輯運算。² 算術運算Oracle中的算術運算符,沒有C#中的算術運算符豐富,只有+、-、*、/四個,其中除號(/)的結果是浮點數(shù)。求

49、余運算只能借助函數(shù):MOD(x,y):返回x除以y的余數(shù)。案例3:每名員工年終獎是2000元,請顯示基本工資在2000元以上的員工的月工資,年總工資。該案例的表請參見本章練習的附表1、附表2、附表3,這三張表是ORACLE 10g自帶的。代碼演示:查詢中的算術運算SQL> SELECT ENAME,SAL,(SAL*12+2000) FROM EMP WHERE SAL>2000; ENAME SAL (SAL*12+2000) JONES 2975 37700 BLAKE 2850 36200 CLARK 2450 31400 SCOTT 3000 38000 KING 5000

50、 62000 FORD 3000 380006 rows selected² 關系運算和邏輯運算Oracle中Where子句經(jīng)中經(jīng)常見到關系運算和邏輯運算,常見的關系運算有:運算符說明運算符說明=等于 >大于<>或者!=不等于<=小于或者等于<小于>=大于或者等于表3 Oracle的關系運算符邏輯運算符有三個:AND、OR、NOT關系運算和邏輯運算與前面SQL Server學習過的一致。² 字符串連接操作符(|)在Oracle中,字符串的連接用雙豎線(|)表示。比如,在EMP表中,查詢工資在2000元以上的姓名以及工作。代碼演示:字符串連

51、接SQL> SELECT (ENAME | 'is a ' | JOB) AS "Employee Details" 2 FROM EMP 3 WHERE SAL>2000; Employee Details-JONESis a MANAGERBLAKEis a MANAGERCLARKis a MANAGERSCOTTis a ANALYSTKINGis a PRESIDENTFORDis a ANALYST 6 rows selected代碼解析: Oracle中字符串可以用單引號,也可以用雙引號,在別名中存在空格時,必須用雙引號。在表名、列

52、名時用雙引號。6. 高級查詢在第一期學習過SQL的簡單查詢和連接查詢。現(xiàn)在學習一些新的SQL操作符。² 消除重復行在Oracle查詢中結果中,可能出現(xiàn)若干行相同的情況,那么可以使用DISTINCT消除重復行。具體的用法如示例:代碼演示:DISTINCT消除重復行SQL> SELECT DISTINCT DEPTNO FROM EMP; DEPTNO- 30 20 10² NULL操作如果某條記錄中有缺少的數(shù)據(jù)值,就是空值(NULL值)。空值不等于0或者空格,空值是指未賦值、未知或不可用的值。任何數(shù)據(jù)類型的列都可以包括NULL值,除非該列被定義為非空或者主鍵。代碼演示:

53、EMP中的NULL值SQL> SELECT ENAME,JOB,SAL,COMM FROM EMP WHERE SAL<2000;ENAME JOB SAL COMM SMITH CLERK 800   ALLEN SALESMAN 1600 300 WARD SALESMAN 1250 500 MARTIN SALESMAN 1250 1400 TURNER SALESMAN 1500 0 ADAMS CLERK 1100   JAMES CLERK 950   7 rows selected在查詢條件中NULL值用IS NULL作條件,非NULL值

54、用NOT IS NULL做條件。案例4:查詢EMP表中沒有發(fā)獎金的員工。代碼演示:NULL值查詢SQL> SELECT ENAME,JOB,SAL,COMM FROM EMP 2 WHERE SAL<2000 AND COMM IS NULL; ENAME JOB SAL COMM SMITH CLERK 800   ADAMS CLERK 1100   JAMES CLERK 950   MILLER CLERK 1300 ² IN 操作在Where子句中可以使用IN操作符來查詢其列值在指定的列表中的行。比如:查詢出工作職責是SALESMA

55、N、PRESIDENT或者ANALYST的員工。條件有兩種表示方法:1. WHERE job = 'SALESMAN ' OR job = 'PRESIDENT ' OR job = 'ANALYST '2. WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST')代碼演示:IN操作SQL> SELECT ENAME,JOB,SAL FROM EMP 2 WHERE job IN ('SALESMAN', 'PRESIDENT', 'ANALYST');ENAME JOB SAL ALLEN SALESMAN 1600 WARD SALESMAN 1250 MARTIN SALESMAN 1250 SCOTT ANALYST 3000 KING PRESIDENT 5000 TURNER SALE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論