2015年oracle數(shù)據(jù)庫開發(fā)教材_第1頁
2015年oracle數(shù)據(jù)庫開發(fā)教材_第2頁
2015年oracle數(shù)據(jù)庫開發(fā)教材_第3頁
2015年oracle數(shù)據(jù)庫開發(fā)教材_第4頁
2015年oracle數(shù)據(jù)庫開發(fā)教材_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章Oracle數(shù)據(jù)庫基礎(chǔ)

Oracle的SQL*PLUS是設(shè)計(jì)所有應(yīng)用系統(tǒng)的基礎(chǔ)工具。要想將應(yīng)用系統(tǒng)設(shè)計(jì)成一個(gè)健

壯的、性能優(yōu)越的系統(tǒng)。最關(guān)鍵的是要理解RDBMS的真正含義和結(jié)構(gòu),理解Oracle

SQL*PLUS的特點(diǎn)和核心,弄清關(guān)系數(shù)據(jù)庫與桌面數(shù)據(jù)庫的差別。比如理解數(shù)據(jù)的完整性、

一致性、索引、視圖等。只有這樣才能設(shè)計(jì)出符合Oracle特點(diǎn)的應(yīng)用系統(tǒng)。從而保證系統(tǒng)

提供使用后不會(huì)出現(xiàn)一致性、性能等問題。

§1.1理解關(guān)系數(shù)據(jù)庫系統(tǒng)(RDBMS)

CODASYL(數(shù)據(jù)系統(tǒng)語言協(xié)會(huì))是數(shù)據(jù)庫任務(wù)組(DatabaseTaskGroup,DBTG)創(chuàng)建的

一種數(shù)據(jù)庫標(biāo)準(zhǔn),這是種基于COBOL的網(wǎng)絡(luò)數(shù)據(jù)庫標(biāo)準(zhǔn)。

§1.1.1關(guān)系模型

一個(gè)描述兩個(gè)集合的元素如何相互聯(lián)系或如何一一對應(yīng)的數(shù)學(xué)概念,對于數(shù)據(jù)庫來說,

關(guān)系只是一個(gè)帶有一些特殊屬性的表。所以有:

數(shù)據(jù)的基礎(chǔ)項(xiàng)是關(guān)系

在這些表上的操作只產(chǎn)生關(guān)系

一個(gè)關(guān)系表必須符合某些特定條件,才能成為關(guān)系模型的一部分

儲(chǔ)存在單元中的數(shù)據(jù)必須是原子的。每個(gè)單元只能存儲(chǔ)一條數(shù)據(jù),叫信息原則

(Information

Principle)o如果存儲(chǔ)多條則違反信息原則。特舒情況下可能需要違反信息原則。

儲(chǔ)存在列下的數(shù)據(jù)必須具有相同的數(shù)據(jù)類型。

每一行是唯一的(沒有完全相同的行)。

列沒有順序。

行沒有順序

列有一個(gè)唯一性的名稱。

關(guān)系模型的另一個(gè)是完整性原則。它包括實(shí)體完整性原則(Entityintegrityrule)和引用

完整性原則(Referentialintegrityrule),如:

主鍵(Primarykey)是能唯一標(biāo)識行的一列或一組列的集合。

由多個(gè)列構(gòu)成的主鍵稱為連接鍵(Concatenatedkey)、組合鍵(Compoundkey),或稱

為復(fù)合鍵(Compositykey)。

另外就是外部鍵(Foreignkey)是一個(gè)表中的一列或一組列,它們在其它表中作為主鍵而

在。一個(gè)表中的外部鍵被認(rèn)為是對另外一個(gè)表中主鍵的引用。實(shí)體完整性原則簡潔地表明主

鍵不能全部或部分地空缺或?yàn)榭?,引用完整性原則簡潔地表明一個(gè)外鍵必須為空或者它所引

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

16

用的主鍵當(dāng)前存在值相一致。

§1.1.2Codd十二法則

Oracle數(shù)據(jù)庫系統(tǒng)是一個(gè)完美的完全符合數(shù)據(jù)庫技術(shù)的關(guān)系數(shù)據(jù)庫系統(tǒng)。要想你的應(yīng)用

設(shè)計(jì)按照數(shù)據(jù)庫原理來進(jìn)行,最重要的就是理解Oracle的結(jié)構(gòu)、語句和命令。Codd提出的

十二條法則在Oracle系統(tǒng)中都可以找到:

1)信息法則。

2)授權(quán)存儲(chǔ)法則,每一個(gè)數(shù)據(jù)項(xiàng)都通過“表名+行主鍵+列名”的組合形成訪問。

3)必須以一致的方法使用空值。

4)一個(gè)活躍的、在線數(shù)據(jù)字典應(yīng)作為關(guān)系型表被儲(chǔ)存

5)必須提供數(shù)據(jù)存取語言進(jìn)行存取訪問。

6)所有能被更新的視圖應(yīng)當(dāng)是可被更新的。

7)必須有集合級的插入、更新和刪除。

8)物理數(shù)據(jù)的獨(dú)立性。即應(yīng)用不依賴物理結(jié)構(gòu)。

9)邏輯數(shù)據(jù)的獨(dú)立性。如果一個(gè)表被分成兩個(gè)部分,則應(yīng)用視圖連接在一起,以便不會(huì)對應(yīng)

用產(chǎn)生影響。

10)完整性的獨(dú)立性。完整性規(guī)則應(yīng)該儲(chǔ)存在數(shù)據(jù)字典中。

11)分布獨(dú)立性。一個(gè)數(shù)據(jù)庫即使被分布,也應(yīng)該能工作。

12)非破壞性原則。如果允許低級存取,一定不能繞過安全性和完整性原則。

§1.2關(guān)系數(shù)據(jù)庫系統(tǒng)(RDBMS)的組成

RDBMS由兩部分組成,即數(shù)據(jù)庫系統(tǒng)內(nèi)核(軟件)和數(shù)據(jù)字典(內(nèi)核用于管理數(shù)據(jù)庫系

統(tǒng)的數(shù)據(jù)結(jié)構(gòu))兩部分。

§1.2.1RDBMS內(nèi)核

RDBMS就是用來控制數(shù)據(jù)訪問的操作系統(tǒng)。它的任務(wù)是按照一定的規(guī)則存儲(chǔ)數(shù)據(jù)、檢

索數(shù)據(jù)及保護(hù)數(shù)據(jù)。

§1.2.2數(shù)據(jù)字典概念

數(shù)據(jù)自動(dòng)存放數(shù)據(jù)庫中所有對象(如表,索引,視圖等)所需的信息。Oracle8i的數(shù)

據(jù)字典是存放數(shù)據(jù)庫系統(tǒng)信息的一組表,從數(shù)據(jù)字典中的信息可以確認(rèn)數(shù)據(jù)庫中數(shù)據(jù)對象的

基本信息及存放位置。

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

17

§1.3SQL、SQL*Plus及PL/SQL

下面用簡單的語言解釋Oracle的常用產(chǎn)品所包含的SQL*PLUS和PL/SQL的關(guān)系。

§1.3.1SQL和SQL*PLUS的差別

SQL是標(biāo)準(zhǔn)結(jié)構(gòu)查詢語言,而SQL*PLUS實(shí)際是包括標(biāo)準(zhǔn)的SQL和Oracle公司的一些命令組

成的產(chǎn)品,因而Oracle公司將其取名為SQL*PLUS。下面是它們的解釋。

1.SQL(StructuredQueryLanguage)

SQL有許多關(guān)鍵字,以下語句是常用于開頭的語句:

AlterInsert

AuditLock

CommitNoaudit

CommentRename

CreateRevoke

DeleteSelect

DropUpdate

GrantValidate

注:

1.Oracle的SQL緩沖區(qū)一次只能存放?條SQL命令;

2.Validate(使生效)在oracle中跟Enable一起用,但可以省去Validate,所以許

多資

料都不介紹Validate的用法。其語法如:

Enable{[Validate][Novalidate]}{[UNIQUE][PRIMARYKEY]...}...

2.SQL*PLUS

除SQL外,SQL*PLUS還包括稱為SQL*PLUS命令的附加命令,這些命令主要用于形成復(fù)雜

報(bào)表,編輯SQL命令,提供幫助信息,維護(hù)系統(tǒng)等。SQL*PLUS包括的命令如下:

@Connect

HostSet

#Copy

InputShow

$Define

ListSpool

/Del

NewpageSqlplus

AcceptDescribe

PauseStart

AppendDisconnect

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

18

QuitTiming

BreakDocument

RemarkTtitle

BtitleEdit

PromptUndefine

ChangExecute

PrintSave

ClearExit

RunColumn

GetRunform

ComputeHelp

3.DDL(DataDefineLanguage)

對于結(jié)構(gòu)查詢語言(有時(shí)稱SQL命令),可以將它們分成兩組,一組是數(shù)據(jù)定義語言(DDL);

另一組是數(shù)據(jù)操縱語言(DML)。其中用于數(shù)據(jù)定義的語言如下:

Alterprocedure重編譯過程

Altertable修改表的屬性

Analyze統(tǒng)計(jì)數(shù)據(jù)庫對象性能值

AltertableaddConstraint對已有的表加約束

Createtable建立表結(jié)構(gòu)

Createindex建立索引

Droptable刪除表實(shí)體及相關(guān)的索引

Dropindex刪除索引

Grant授權(quán)給用戶或角色

Truncate刪除表中的所有行

Revoke從用戶或角色收回權(quán)限

4.DML(DataManipulationLanguage)

對于結(jié)構(gòu)查詢語言的另一組是數(shù)據(jù)操縱語言(DML)。DML其中用于數(shù)據(jù)操縱的命令如下:

Insert

Delete

Update

Select

Commitwork

Rollback

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

19

§1.3.2PL/SQL語言

PL/SQL是OracleRDBMS(Oracle6之后版本)的一個(gè)組成部分,PL是“過程化語言

(ProcedureLanguage)”的縮寫。PUSQL語言是在SQL語言中結(jié)合了結(jié)構(gòu)化過程語言成

的準(zhǔn)第四代語言。

使用PL/SQL的目的:

由于大多數(shù)PUSQL是在服務(wù)端來運(yùn)行,這樣可減少由客戶端運(yùn)行程序時(shí)所需的網(wǎng)絡(luò)數(shù)

據(jù)流量。

可以使用PL/SQL的地方:

PL/SQL可以單獨(dú)進(jìn)行程序的編寫,完成一般的處理功能;

在高級語言中可嵌入PL/SQL塊;

在4GL中可以嵌入PL/SQL塊;

在PL/SQL程序中可以嵌入HTML利XML。

§1.4登錄至USQL*PLUS

我們創(chuàng)建任何對象,如創(chuàng)建表、索引等都需要連接到Oracle中,這里用“登錄”主要是

Oracle的界面提供的是Login這樣的叫法。其實(shí)就是連接的意思。在Client/Server結(jié)構(gòu)

下,

Oracle提供兩種方式連接SQL*PLUS,其中SQL*NETV2.x版本(目前版本不再使用SQL*NET

V2.x)提供在字符方式下連接到SQL*PLUS,SQL*NETV2.x版本提供在圖形方式(Window)

使用,目前版本的0RACLE8/8i都使用NET8連接.(NET8不再支持字符終端)

§1.4.1UNIX環(huán)境

在UNIX下,要確??蛻舳嘶蚍?wù)器端與Oracle服務(wù)器系統(tǒng)進(jìn)行連接,必須保證

tnsnames.ora和listener,ora兩個(gè)參數(shù)文件的正確配置。詳細(xì)的配置解釋在DBA章節(jié)里解

釋。下面是tnsnames.ora和listener,ora兩個(gè)參數(shù)文件的內(nèi)容顯示。

1.tnsnames.ora參數(shù)文件:

INST1_HTTP=

(DESCRIPTION=

(Al)DRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))

)

(CONNECT_DATA=

(SERVER=SHARED)

(SERVICE_NAME=s450)

(PRESENTATION=http://admin)

)

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

20

)

EXTPROC^CONNECT10N_DATA=

(DESCRIPTION=

(ADDRESSLIST=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))

)

(CONNECT_DATA=

(SID=PLSExtProc)

(PRESENTATION=RO)

)

)

S450=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=s450)

)

)

2.listener,ora參數(shù)文件:

LISTENER=

(DESCRIPTIONLIST=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))

)

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))

)

)

)

SIDJJST_LISTENER=

(SID_LIST=

(SID_DESC=

(SIDNAME=PLSExtProc)

(ORACLEHOME=/home/orac1e/app/orac1e/product/8.1.7)

(PROGRAM=extproc)

)

(SID^DESC=

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

21

(GLOBAL_DBNAME=s450)

(ORACLEHOME=/home/orac1e/app/orac1e/product/8.1.7)

(SID_NAME=s450)

)

)

如果安裝后己經(jīng)正確地對上面的兩個(gè)參數(shù)文件進(jìn)行配置,則可以按照下面步驟進(jìn)行登錄:

1)先啟動(dòng)服務(wù)器端監(jiān)聽器:

Isnrctlstart

2)用下面命令顯式登錄到SQL*PLUS:

$sqlplususername/password

$SQLPLUSusername/password@connect_string

3)用下面命令隱式登錄到SQL*PLUS:

$sqlplus[enter]

Enterusername:scott

Enterpassword:******

§1.4.2WindowsNT和WINDOWS/2000環(huán)境

在NT/2000環(huán)境下,要使客戶端能與Oracle服務(wù)器進(jìn)行連接,tnsnames.ora和

listener.ora參數(shù)文件的配置如下:

1.tnsnames.ora參數(shù)文件:

0RA816.TAIJI.COM.CN=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=ora816)

)

)

EXTPROC_CONNECTION_DATA.TAIJI.COM.CN=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))

)

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

22

(CONNECT_DATA=

(Sil)=PLSExtProc)

(PRESENTATION=RO)

)

)

S450=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=dbsvr)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=s450)

)

)

2.listener,ora參數(shù)文件:

LISTENER=

(DESCRIPTION」IST=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPR0C1))

)

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=1521))

)

)

(DESCRIPTION=

(PROTOCOL_STACK=

(PRESENTATION=GIOP)

(SESSION=RAW)

)

(ADDRESS=(PROTOCOL=TCP)(HOST=zhao)(PORT=2481))

)

)

S1D_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SIDNAME=PLSExtProc)

(ORACLE_HOME=D:\oracle)

(PROGRAM=extproc)

)

(SIDDESC=

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

23

(GLOBAL_DBNAME=ora816)

(ORACLEJOME=D:\oracle)

(SID_NAME=ora816)

)

)

WindowsNT/2000字符方式登錄步驟:

1)先啟動(dòng)服務(wù)器端監(jiān)聽器:

Isnrctlstart

2)用下面命令顯式登錄到SQL*PLUS:

$sqlplususername/password

$SQLPLUSusername/password@connect_string

WindowsNT/2000圖形方式登錄步驟:

1)點(diǎn)擊"開始"=》"程序"=》"Oracle-0raHome92"=》**ApplicationonDevelopment"

=》

“SQLPlus"進(jìn)入如下屏幕:

在WINDOWSNT/98/2000上的登錄界面(sqlplus圖)

可以在用戶名框內(nèi)輸入用戶、口令及主機(jī)字串;也可以分別進(jìn)行輸入。

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

24

§1.5常用SQL*PLUS附加命令簡介

Oracle公司提供的附加語句(或稱命令),可以滿足程序人員和管理員的一些特殊操作要

求。比如,在顯示超過上百行記錄信息時(shí),可以采用每屏“暫?!眮韺?shí)現(xiàn)。要達(dá)到這樣的目

的,就要在SQL>下發(fā)setpauseon命令。由于SQL*PLUS命令較多,下面僅給出最常用的

幾個(gè)命令的說明,詳細(xì)的請參考附錄。

§1.5.1登錄至USQL*PLUS

可以用下面命令登錄到SQLTLUS,SQL*PLUS命令的簡單語法如下:

SQLPLUS[[logon]|[start]]

/ogo”可以是:

{username[/password][@connect_identifier]\/}[AS{SYSOPER|SYSDBA)]

|/NOLOG

注7:SQU^US主要是在命令方式下使用,在NT、WINDOWS/2000.UN/X的用法都一

樣。

注2:如果在U/V/X下,SQLPLUS命令不被識別(不存在),則問題在環(huán)境變量相丁H沒

有設(shè)

置正確或者沒有設(shè)置。SQLPLUS可執(zhí)行程序在$。玦。_之HOME/加目錄下。

§1.5.2EXIT和QUIT

可以用exit或quit來終止SQL*PLUS的操作(會(huì)話)。語法如下:

{EXITIQUIT}[SUCCESSIFAILURE|WARNING]

{EXIT|QUIT}可以用exit或quit,目前它們的功能一樣。

SUCCESS正常退出

FAILURE帶提示錯(cuò)誤代碼的退出

WARNING帶提示警告代碼的退出

COMMIT退出前將未提交進(jìn)行保存

例如:

SQL>exit

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

25

§1.5.3DESCRIBE(顯示表、視圖結(jié)構(gòu))

DESCR舊E可以用(只要用DESC即可)來顯示表、視圖的列的定義,也可以顯示同義詞、函

數(shù)或存儲(chǔ)過程的說明。語法如下:

DESCfRIBE]{{schema.]object[@connect_identifier]}

Schema;用戶名,如果省去,則為對象的所有者。

object

可以是表(table),視圖(view),類型(type),存儲(chǔ)過程(procedure),函數(shù)(function),

包(package)或同義詞(synonym)

@connect_identifier

數(shù)據(jù)庫連接字串

例:顯示emp表的結(jié)構(gòu):

SQL>descemp

§1.5.4LIST(列出)命令

可以用LIST命令來列出當(dāng)前SQL緩沖區(qū)中的一行或多行命令語句。

L[IST][n\nmln*\nLASTI*I*nl*LASTILAST]

n列出第n行

nm列出n到m行

n*列出第n行到當(dāng)前行

nLAST列出第n行到最末行

*列出所有行

*n列出當(dāng)前行到第n行

*LAST列出當(dāng)前行到最末行

LAST列出最末行

例:

SQL>LIST

1SELECTENAME,DEPTNO,JOB

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

26

2FROMEMP

3WHEREJOB=,CLERK,

4*ORDERBYDEPTNO

§1.5.5Change(替換字符串)命令

可以用Change命令來改變字符串(即替換字符串)。語法如下:

C[HANGEJsepcharold[sepchar[new[sepchar]]]

Sepchar為分隔符,可以是“/"或請使用者特別注意

Old舊字串

New新字串

例:將除號(/)改為乘號(*),則需要命令為c!/!*!。即:

SQL>1

1*selectsal,sal/100fromemp

SQL>c!/!*!

提醒:對于修改/字符的只能用!來作分隔符(上例)。

例:將乘號(*)改為加號(+),則需要命令為c!/!*!。即:

SQL>1

1*selectsal,sal*100fromemp

SQL>c/*/+/

1*selectsal,sal+100fromemp

SQL>

§1.5.6Append(追加字符串)命令

可以用Append命令來完成在當(dāng)前行的末尾追加字符串。語法如下:

A[PPEND]text

Text所要求追加的字符串

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

27

例:在當(dāng)前行selectsal,sal+100fromemp后加wheresal>=2000,則:

SQL>1

1*selectsal,sal+100fromemp

SQL>awheresal>=2000

1*selectsal,sal+100fromempwheresal>=2000

SQL>

§1.5.7Save保存當(dāng)前緩沖區(qū)命令到文件

可以用SAVE命令將當(dāng)前的命令行保存到操作系統(tǒng)的文件中。語法如下:

SAVLEJfilename[.extj[CRE[ATE]IREP[LACE]IAPP[END]]

其中:

filename:你將把緩沖區(qū)中的內(nèi)容存入到操作系統(tǒng)目錄的文件名。

ext:若使用文件后綴,缺省的文件后綴為SQL。

例:

SQL>selecttable_namefromdietwheretable_namelike'%ROLE%';

SQL>savec:\get_role

§1.5.8GET將命令文件讀到緩沖區(qū)

可以用GET命令將操作系統(tǒng)的目錄下的命令文件讀到緩沖區(qū)(但不執(zhí)行)。語法如下:

GETfilename[.extjILISLTJINOLIISTJJ

其中:

filename:希望加載到SQL緩沖區(qū)的文件名

ext:文件的擴(kuò)展名,缺省為SQL.

例:

SQL>getc:\get_role

§1.5.9SPOOL將信息記錄到文件中

Oracle的SPOOL命令可以實(shí)現(xiàn)將屏幕所出現(xiàn)的一切信息記錄到操作系統(tǒng)的文件中直到

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

28

SPOOLOFF為止。語法如下:

SPO[OL][filename[.ext]IOFFIOUTJ

其中:

filename:你想輸出(spool)的文件名。

ext:文件的后綴。缺省的后綴是LST(或LIS)。

SQL>coltable_namefora20

SQL>colcommentsfora80

SQL>setlinesize110

SQL>SP001c:\all_dict

SQL>selecttablename,commentsfromdiet;

(系統(tǒng)查詢信息)

SQL>SPOOLOFF

§1.5.10再運(yùn)行當(dāng)前緩沖區(qū)的命令

在SQL>方式下,如果希望在運(yùn)行當(dāng)前的命令,可用Run(或R)或用/來實(shí)現(xiàn),如:

SQL>setlin120

SQL>selecttablenamefromdietwheretablenamelike'%ROLE%';

TABLE_NAME

DBA_ROLES

DBAROLEPRIVS

USER_ROLE_PRIVS

ROLEROLEPRIVS

ROLE_SYS_PRIVS

ROLETABPRIVS

SESSION_ROLES

已選擇7行。

SQL>1

1*selecttablenamefromdietwheretablenamelike'%ROLE%'

SQL>/

TABLENAME

DBAROLES

DBA_ROLE_PRIVS

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

29

USER_ROLE_PRIVS

ROLE_ROLE_PRIVS

ROLE_SYS_PRIVS

ROLE_TAB_PRIVS

SESSION_ROLES

已選擇7行。

§1.6常用數(shù)據(jù)字典簡介

ORACLE提供許多內(nèi)部數(shù)據(jù)字典,用以管理系統(tǒng)的各種信息和參數(shù)(即數(shù)據(jù)庫對象),下

面列出幾個(gè)常用的數(shù)據(jù)字典供初學(xué)者參考,其它方面的數(shù)據(jù)字典將在DBA管理中介紹。

ORACLE數(shù)據(jù)字典的命名說明:

USER為前綴一一記錄用戶的所有對象信息

ALL為前綴——記錄包括USER記錄和授權(quán)給PUBLIC或該用

戶的所有對象的信息。

DBA為前綴一一記錄關(guān)于數(shù)據(jù)庫對象(非用戶對象)的信息.

V$公共系統(tǒng)動(dòng)態(tài)視圖,用于系統(tǒng)優(yōu)化和調(diào)整參考.

V$動(dòng)態(tài)性能視圖,你可用CATALOG.SQL腳本建立動(dòng)態(tài)視圖建立同義詞。

GV$新(oracle8)的附加的固定視圖(GlobalV$).在并行環(huán)境下反應(yīng)的是

V$視圖的信息。如:

SELECT*FROMGV$LOCKWHEREINST_ID=2ORINST_ID=5;

返回的是instances2和5的丫$的信息。所以GV$反應(yīng)一"組Instances的參數(shù).GV$視圖的

限制是參數(shù)PARALLEL_MAX_SERVERS必須大于0。

詳見OracleEnterpriseManagerAdministrator'sGuide.

注:請注意下面的總結(jié):

一般DBA_的視圖內(nèi)容都包含USER一和ALL一為前綴的視圖;

DBA為前綴的視圖的內(nèi)容基本上是大寫;

以V$_為前綴的視圖的內(nèi)容基本上是小寫。

1.USER_TABLEs(=TABS)用戶的所有表的信息。

2.USERTABCOLUMNS(=COLS)有關(guān)各表的列(字段)的信息

3.USER_VIEWS用戶的所有視圖

4.USERSYNONYMS(=SYN)用戶同義詞

5.USER_SEQUENCES(=SEQ)用戶序列

6.USERCONSTRAINTS記錄創(chuàng)建表結(jié)構(gòu)時(shí)建立的限制。

7.USER_TAB_COMMENTS表的注釋。如:

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

30

Commentontableempis'職工表’;

8.USER_COL_COMMENTS列(字段)注釋。如:

Commentoncolumnemp.enameis'姓名';

9.USER_INDEXES(=IND)用戶索引的簡要信息

10.USER_IND_COLUMNS用戶索引的列信息

11.USER_TRIGGERS用戶觸發(fā)器信息

12.USER_SOURCE用戶存儲(chǔ)過程

13.USER_TABLESPACE用戶可以使用的表空間信息

14.USER_TS_QUOTAS用戶使用系統(tǒng)資源的信息

15.USER_SEGMENTS用戶對象所使用空間信息

16.USER_EXTENTS用戶的擴(kuò)展段信息

17.USER_OBJECTS用戶對象

=USER_TABLES+USER_VIEWS+USER_INDEXES+

USER_SOURCE+USER_TRIGGERS+USER_JAVA

18.USER_PART_TABLES用戶分區(qū)信息

19.USER_TAB_PARTITIONS

20.USER_PART_COL_STATISTICS

21.USER_IND_PARTITIONS

22.USER_FREE_SPACE

23.CAT(=USER_CATALOG)用戶可以訪問的所有的基表。

24.TAB用戶創(chuàng)建的所有基表,視圖,同義詞等。

25.DICT(=DICTIONARY)構(gòu)成數(shù)據(jù)字典的所有表的信息。

提示:雖然。mc/eCommentoncolumntablename.columnis'xxxx';等來實(shí)現(xiàn)對

或列進(jìn)行注釋,但不建議設(shè)計(jì)者采用這樣的工作方式。而建議將注釋寫到腳本中更為直

觀。

§1.7ORACLE數(shù)據(jù)類型

Oracle數(shù)據(jù)庫的數(shù)據(jù)類型與其它的數(shù)據(jù)庫系統(tǒng)相比,它的數(shù)據(jù)類型不多,Oracle在表示

數(shù)據(jù)方面比其他數(shù)據(jù)庫系統(tǒng)來說要省去許多關(guān)鍵字。Oracle只用NUMBER(m,n)就可以表示

任何復(fù)雜的數(shù)字?jǐn)?shù)據(jù)。其它如日期類型等也簡單得多,只DATE就表示日期和時(shí)間。下面

列表形式給出各個(gè)版本的Oracle系統(tǒng)數(shù)據(jù)類型的表示方法。下面給出Oracle舊版本的數(shù)據(jù)

型的目的是讓讀者了解Oracle的變化,另外就是你在對舊版本進(jìn)行升級或數(shù)據(jù)轉(zhuǎn)換時(shí)要注

,息

各個(gè)版本的差別。

0RACLE5、ORACLE6數(shù)據(jù)類型

數(shù)據(jù)類型說明

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

31

Char可變長字符型,W254

Varchar2可變長字符型,W2000

Number(m,n)數(shù)字類型,含整數(shù)、小數(shù)等

Date日期型,含時(shí)間,缺省格式為mmm-dd-yyyyhh:mi:ss(占7字節(jié))

Long存儲(chǔ)大型可變長字符串,W2GB

Raw存儲(chǔ)短二進(jìn)制串,<2GB

Longraw存儲(chǔ)長二進(jìn)制串,W2GB

0RACLE7數(shù)據(jù)類型

數(shù)據(jù)類型說明

Char定長字符,<255個(gè)字符

Varchar變長字符,W2000個(gè)字符

Varchar2變長字符,W2000個(gè)字符

Number(m,n)數(shù)字類型,含整數(shù)、浮點(diǎn)、雙精度等

Long存儲(chǔ)大型可變長字符串,W2GB

Raw存儲(chǔ)可變短二進(jìn)制數(shù),W2000

Longraw存儲(chǔ)大型可變長二進(jìn)制數(shù),W2GB

0RACLE8/8i數(shù)據(jù)類型

數(shù)據(jù)類型說明

Char定長字符,W2000個(gè)字符

Varchar(同Varchar2)可變字符,<4000個(gè)字符

Varchar2變長字符,W4000個(gè)字符

Date固定長度(7字節(jié))的日期型

Number數(shù)字型,可存放實(shí)型利整型

Long可變字符,W2GB個(gè)字符

Raw可變二進(jìn)制數(shù)據(jù),W4000字節(jié)

Longraw可變二進(jìn)制數(shù)據(jù),W2GB

MLSLABEL僅TrustedOracle用長度在2~5字節(jié)間

Blob大二進(jìn)制對象,W4GB

Clob大字符串對象,W4GB

Nclob多字節(jié)字符集的Clob,W4GB

Bfile外部二進(jìn)制文件,大小由OS決定

CHAR?size?

定長字符型(在0racle5、0racle6是變長),字符長度不夠自動(dòng)在右邊加空格符號。當(dāng)

符長度超出2000個(gè)則錯(cuò)誤。不指定大小缺省為1。

VARCHAR?size?

可變字符型,當(dāng)前與VARCHAR2(〈size>)相同。

VARCHAR2?SIZE?

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

32

可變字符型,當(dāng)前與VARCHAR(〈size>)相同。VARCHAR2類型的字段(列)可存放4000個(gè)字

符;但是VARCHAR2變量可以存放32,767個(gè)字符。大小必須指定。

NCHAR?size?和NVARCHAR2?size?

NCHAR和NVARCHAR2分別與CHAR和VARCHAR2有相同的大小。并用于于存放National

LanguageSupport(NLS)數(shù)據(jù),Oracle允許以本地語言存放數(shù)據(jù)和查詢數(shù)據(jù)。

如果將列名聲明成NCHAR、NVARCHAR2這樣的類型,則insert和select等語句中的具體值

前加N,不能直接按照普通字符類型進(jìn)行操作。看下面例子:

SQL>createtablenchar_tst(namenchar(6),addrnvarchar2(16),salnumber(9,2));

表已創(chuàng)建。

SQL>insertintonchar_tstvalues(N‘趙元杰',N'北京市海淀區(qū)',9999.99);

已創(chuàng)建1行。

SQL>select*fromnchar_tstwherenamelikeN'趙%';

NAMEADDRSAL

趙元杰北京市海淀區(qū)9999.99

SQL>select*fromnchar_tstwherenamelike'趙%';

select*fromnchar_tstwherenamelike'趙/'

*

ERROR位于第1行:

ORA-12704:字符集不匹配.

提示:雖然Oracle可以使用nchar,nvarchar2類型來存放字符數(shù)據(jù),但建議設(shè)計(jì)者不

要使

用NCHAR和NVARCHAR2。因?yàn)镃HAR和VARCHAR2就能存放漢字。

NUMBER?p>,<s?

<p>是數(shù)據(jù)的整數(shù)部分,〈s>是數(shù)據(jù)的精度(即小數(shù))部分,注意,<s>部分可以表示負(fù)的精度。

用<S>可以表示從小數(shù)點(diǎn)往右或往左保留多少位。如下表:

實(shí)際值數(shù)據(jù)類型存儲(chǔ)值

1234567.89Number1234567.89

1234567.89Number(8)1234568

1234567.89Number(6)出錯(cuò)

1234567.89Number(9,1)1234567.9

1234567.89Number(9,3)出錯(cuò)

1234567.89Number(7,2)出錯(cuò)

1234567.89Number(5,-2)1234600

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

33

1234511.89Number(5,-2)1234500

1234567.89Number(5,-4)1230000

1234567.89Number(*,1)1234567.9

Salnumber(7,2),一表示5位整數(shù),2位小數(shù).

DATE

Oracle的日期型用7個(gè)字節(jié)表示,每個(gè)日期型包含如下內(nèi)容:

Century(世紀(jì))

Year(年)

Month(月)

Day(天)

Hour(小時(shí))

Minute(分)

Second(秒)

II期型字段有下面特點(diǎn):

II期型字段的插入和更新可以數(shù)據(jù)型或字符并帶to_date函數(shù)說明即可。

缺省的日期格式有NLS_DATE_FORMAT參數(shù)控制,它的缺省格式為DD-M0N-YY。

缺省的時(shí)間是夜里00:00:00(即0點(diǎn)0分0秒)。

sysdate返回的是服務(wù)器的時(shí)間,見下面例子。

日期格式的顯示可以設(shè)置,見下面例子。

日期型可以運(yùn)算,見下面例子。見下面例子。

世紀(jì)用cc表示;年用yyyy表示,月用mm表示,II用dd表示,小時(shí)用hh24表示,分

mi表示,秒用ss表示。

例子:

SQL>createtablesave_info(per_idvarchar2(20),namevarchar2(20),tran_datedate,

2tran_valnumber(12,2));

表已創(chuàng)建。

SQL>insertintosave_infovalues('110105540609811'趙元杰',

2to_dateC2001.06.18','yyyy.mm.dd"),12345.66):

已創(chuàng)建1行。

SQL>select*fromsaveinfo;

PERIDNAMETRANDATETRANVAL

110105540609811趙元杰18-6月-011234.66

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

34

SQL>selectper_id,name,to_char(tran_date,,yyyy/mm/dd,),tran_valfromsave_info;

PERIDNAMETOCHAR(TRTRAN_VAL

110105540609811趙元杰2001/06/1812345.66

SQL>showparameternls_date_format

NAMETYPEVALUE

n1s_date_formatstring

SQL>altersessionsetn1s_date_format=

2'〃公元〃yyyy〃年〃mm〃月〃dd〃||〃’;

會(huì)話已更改。

SQL>selectsysdatefromdual;

SYSDATE

公元2001年05月18日

SQL>selectto_char(sysdate,?ccyyyy.mm.dd')fromdual;

TO_CHAR(SYSDA

212001.05.18

關(guān)于日期型的使用方法詳細(xì)請參考《0racle8iNationalLanguageSupportGuide》。

BLOB

大二進(jìn)制對象,每條記錄可存儲(chǔ)達(dá)4GB的數(shù)據(jù),詳細(xì)見后面章節(jié)。

CLOB

大字符對象,每條記錄可存儲(chǔ)達(dá)4GB的數(shù)據(jù),詳細(xì)見后面章節(jié)。

BFILE

外部二進(jìn)制文件,每條記錄可存儲(chǔ)達(dá)4GB的數(shù)據(jù)(與OS有關(guān)),詳細(xì)見后面章節(jié)。

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

35

RAW

非結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),這些數(shù)據(jù)不被數(shù)據(jù)庫系統(tǒng)解釋。RAW可以存儲(chǔ)達(dá)2,000字節(jié)。

LONGRAW

大的二進(jìn)制類型數(shù)據(jù),LONGRAW是非結(jié)構(gòu)的二進(jìn)制數(shù)據(jù),這些數(shù)據(jù)不被數(shù)據(jù)庫系統(tǒng)解釋。

LONGRAW可以存儲(chǔ)達(dá)2GB字節(jié)。LONGRAW不能被索引,而RAW可以被索引。

ROWID

ROWID在Oracle數(shù)據(jù)庫中是一個(gè)虛的列,即系統(tǒng)用的特殊的列,不是我們建立的列。用于

數(shù)據(jù)庫中的每條記錄進(jìn)行定位。詳細(xì)見“Rowid的使用”章節(jié)。

UROWID

UR0WID是UniversalROWID的意思。即全球ROWID,它支持邏輯和物理ROWID,也作為外部

表的(通過getway訪問的非Oracle表)的ROWID。UROWID類型可以存儲(chǔ)所有的ROWID類型

的數(shù)據(jù)。

%TYPE類型的匹配:

books_printednumber(6);

bookssoldbooksprinted%TYPE;

books_sold的數(shù)據(jù)類型與book_printed的類型,?致;

(%TYPE類型在PL/SQL中介紹)。

空值與字符型、數(shù)字型的運(yùn)算:

null+<數(shù)字>=null(空值+數(shù)字仍是空值)

null><數(shù)字>=null(空值與數(shù)字比較結(jié)果為空值)

null||'字符串‘二字符串

number類型與以下類型具有同等的值域:

DEC

Decimal

DoublePREcision

Float

Integer

Int

Numeric

Real

Smallint

提示:雖然Oracle可以使用上面的子數(shù)據(jù)類型,但建議還是采用NUMBER(n,m)為好。因

為如

果使用子數(shù)據(jù)類型定義字段類型不當(dāng),可能引起數(shù)據(jù)在運(yùn)算方面的問題。

Long數(shù)據(jù)類型的限制:

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

36

select中可以用long;

update中可以用select子句;

insert中可以用Valus子句;

每個(gè)表只能允許一個(gè)long歹ij;

long列不能列出完整性約束(null、notnull除外);

long列不能被索引;

過程或存儲(chǔ)函數(shù)不能接收long型函數(shù);

存儲(chǔ)函數(shù)不能返回long型值。

long目前不能出現(xiàn)在以下情況中:

select中的Where,Groupby,orderby,Connectby,distinct;

不能對long列作substr,instr;

發(fā)達(dá)式或條件:

子查詢或集合中不能用long;

Createtable...asselect中不能用long;

§1.8SQL語句基礎(chǔ)

下面給出SQL語句的基本介紹,更詳細(xì)的描述見后面的章節(jié)。

§1.8.1SQL語句所用符號

操作符用途例子

+-表示正數(shù)或負(fù)數(shù),正數(shù)可省去+-1234.56

+將兩個(gè)數(shù)或表達(dá)式進(jìn)行相加A=c+b

-將兩個(gè)數(shù)或表達(dá)式進(jìn)行相減34-12

*將兩個(gè)數(shù)或表達(dá)式進(jìn)行相乘12*34

/除以一個(gè)數(shù)或表達(dá)式18*11

NULL空值判斷Wherenameisnull;

II字符串連接“01-1ltel_num

=等于測試Select*fromemp

wherename='趙元杰';

!=或o或八=不等于測試Select*fromemp

wherename!=’趙元杰';

<小于測試Select*fromemp

Wheresal<5000;

>大于測試Select*fromemp

Wheresal>5000;

<=小于等于測試Select*fromemp

Wheresal<=5000;

>=大于等于測試Select*fromemp

Wheresal>=5000;

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

37

Notin測試某值是否在一個(gè)指定的結(jié)果集中Selectname,addrfromexpert

wherelocalnotin,北京,,'上

海');

ANY將一個(gè)值與一組值進(jìn)行比較,返回滿足條

件的結(jié)果。必須跟!=,〈>,<=,>=

selectename,salfromemp

wheresal<=any(selectsalfrom

empwheredeptno=10)

SOME同ANY,必須*艮!

ALL將一個(gè)值與一組值比較,返回滿足條件的

所有列值。必須跟!=<>,<=,>=

Selectname,salfromemp

Wheresal<=

all(500,800,1200);

Notbetween

AandB

判斷某個(gè)值是否界于兩者之間。Selectname,salfromempWhere

salbetween500and1200;

(notjexists判斷某個(gè)列是否存在于一組值中。selectdname,deptnofrom

deptwhereexists

(select*fromempwhere

dept.deptno=emp.deptno)

A(not]likeb

[Escape4char,]

比較兩個(gè)模式是否相似,當(dāng)使用like語句

時(shí)Oracle不去訪問索引。

Select*fromemp

Whereenamelike'TH%';

Is[not]null測試值是否為空。Selectename,deptnofromemp

Wherecomm.Isnullor

comm.=0;

Not對結(jié)果的否定。Select*fromemp

Wheresalnot(sal<1000);等價(jià)

selectename,salfromemp

wheresal>=1000;

AND用于判斷兩個(gè)條件十分都滿足。Select*fromempwhere

Ename=,SIMTH,and

sal>=1000;

OR用于判斷兩個(gè)條件中是否有一個(gè)滿足。Select*fromempwhere

Ename=,SIMTH,or

ename=,SCOTT,;

UNION用于返回(組合)兩個(gè)查詢中所有唯一的

行。

Selectenamefromempunion

Selectenamefromemp;

UNIONALL用于返回(組合)兩個(gè)查詢中所有所有的

行。

INTERSECT用于返回兩個(gè)查詢中相同的行。Selectenamefromemp1

intersectselectenamefrom

emp2;

MINUS用于返回兩個(gè)查詢中的不同的行。

§1.8.2簡單select查詢

當(dāng)我們可以用SQL*PLUS登錄到SQL>下后,我們可以用DESC顯示某表的結(jié)構(gòu),也可以

select語句簡單查詢表中的一些列的內(nèi)容。

例:要查詢EMP表中員工的姓名、工資及出生日期,則:

SQL>selectename,sal,hiredatefromemp;

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

38

§1.9偽列及偽表

Oracle系統(tǒng)為了實(shí)現(xiàn)完整的關(guān)系數(shù)據(jù)庫功能,系統(tǒng)專門提供了一組稱為偽列

(Pseudocolumn)的數(shù)據(jù)庫列,這些列不是在建立對象(如建表)時(shí)由我們完成的,而是

在我們建立對象時(shí)由自動(dòng)Oracle完成的。Oracle目前有以下的偽列:

CURRVALandNEXTVAL使用序歹(I號的保留字

LEVEL查詢數(shù)據(jù)所對應(yīng)的級

ROWID記錄的唯?標(biāo)識

ROWNUM限制查詢結(jié)果集的數(shù)量

有關(guān)偽列的詳細(xì)解釋和使用見相關(guān)章節(jié)。

Oracle還提供了一個(gè)DUAL的偽表,該表主要目的是保證在使用SELECT語句中語句

的完整性而提供的,如:我們要查詢當(dāng)前的系統(tǒng)H期及時(shí)間,而系統(tǒng)的II期和時(shí)間并是放在

一個(gè)指定的表里。所以在from語句后就沒有表名給出。為了使用from后有個(gè)表名,我們

就用DUAL代替。如:

例1:查詢Oracle系統(tǒng)日期及時(shí)間:

SQL>selectto_char(sysdate,'yyyy.mm.ddhh24:mi:ss')fromDUAL;

TO_CHAR(SYSDATE;YY

2001.06.0207:28:09

例2:計(jì)算一下5000+5000*0.1的結(jié)果是多少,則:

SQL>select5000+5000*0.1fromDUAL;

5000+5000*0.1

5500

§1.10使用SQLWorksheet工作

在新的Oracle版本里,系統(tǒng)提供了一個(gè)叫SQLWorksheet的圖形SQL工作環(huán)境,它是

ORACLEEnterpriseManager的一部分。使用它可以免去在SQL>下編輯行命令的不便。它

全是在圖形方式進(jìn)行。它的啟動(dòng)有以下幾種方法:

從ORACLEEnterpriseManager中啟動(dòng)

從Administrtor工具中啟動(dòng)

從操作系統(tǒng)中啟動(dòng)

下面給出在操作系統(tǒng)下啟動(dòng)SQLWorksheet工具工作的步驟:

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

39

1)點(diǎn)擊SQLWorksheet圖標(biāo),即選擇開始->程序->Oracle-OraHome81->database

Administration->SQLPLUSWorksheet?選中SQLPLUSWorksheet后出現(xiàn)如下畫面:

圖1.10-1使用SQLWorksheet的登錄畫面

在用戶名、口令及服務(wù)輸入ORACLE的有效用戶名、口令及連接字串再點(diǎn)擊確定后進(jìn)入如圖

1.10-2所示的畫面。

2)當(dāng)進(jìn)入圖1.10-2所示的畫面后。你就可以工作了。目前的版本是在屏幕的上方輸入命令,

屏幕的下方是系統(tǒng)顯示結(jié)果。

3)我們將光標(biāo)點(diǎn)擊到屏幕上方,輸入SQL命令,如輸入:

selectename,salfromscott.emp;

輸入完成命令后,用光標(biāo)點(diǎn)擊左邊的執(zhí)行圖標(biāo),Oracle會(huì)結(jié)果顯示在屏幕的下方:

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系一】3705091575

40

圖h10-2登錄成功后的畫面

圖1.10-3查詢命令及顯示結(jié)果畫面

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

41

從SQLWorksheet工具中可以看出,該工具提供了相當(dāng)豐富的功能。下面給出個(gè)功能的簡

說明:

1.文件:

改變數(shù)據(jù)庫連接:可以連接到另外的用戶和數(shù)據(jù)庫上去;

打開:可以打開現(xiàn)有文件;

將輸入另存為:將當(dāng)前命令存為一個(gè)文件;

將下方顯示的結(jié)果存為一個(gè)文件。

2.編輯:

剪切:將當(dāng)前選中字符進(jìn)行剪切;

復(fù)制:將選中字符進(jìn)行剪切;

粘貼:將緩沖區(qū)字符進(jìn)行粘貼;

全選:對當(dāng)前畫面所有字符全選;

全部清除:清除目前的所有內(nèi)容。

3.工作單:

執(zhí)行:執(zhí)行當(dāng)前的命令;

運(yùn)行本地腳本:運(yùn)行操作系統(tǒng)下某個(gè).SQL文件(點(diǎn)擊后提示輸入文件名);

命令歷史記錄:查看命令歷史記錄;

上一條命令:顯示上一條命令。

提示:如果你的SQL顯示的不是漢字(出現(xiàn)亂字符),請你將你的N7Z2OOO/98

環(huán)

境下的漢字變量設(shè)置與服務(wù)器的一樣就好了。在WINDOWSNT環(huán)境設(shè)置漢字變量步驟:

用regedif修改注冊表中的所有ORACLE字符集項(xiàng),如:

“點(diǎn)擊:開始=》運(yùn)行=》輸入reged”;

2)點(diǎn)擊“HEY_LOCAL_MACH1NE”左邊的“+”以展開目錄;

3)點(diǎn)擊aSOFTWARE"左邊的"+”以展開目錄;

4)點(diǎn)擊aORACLE"項(xiàng);

5)修改。心1CLE樹下所有“NLS”變量與pr%就中的一致。

關(guān)于漢字環(huán)境變量的設(shè)置,請參閱《Oracle8i/9I初級數(shù)據(jù)庫管理》。

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

42

第二章查詢基礎(chǔ)

下面給出查詢的一些基本的操作描述,如果你是位Oracle老手則可以跳這?章。

§2.1SELECT語句

在關(guān)系數(shù)據(jù)庫中,使用頻率最高要算SELECT語句了。盡管SELECT語句的使用非常

簡單,但確很有學(xué)問。下面簡單介紹有關(guān)SELECT語句的常用方法。

1.命令語法:

SELECT的簡單語法:

SELECT[DISTINCTIALL]{*Icolumn1[,column2]...}

FROM{table_lI(subquery)}[alias]

[,{table_2I(subquery)}[alias]]...

[WHEREcondition]

[CONNECTBYcondition[STARTWITHcondition]

[GROUPBYexpnj[HAVINGexpnj

[{UNION[ALL]IINTERSECTIMINUS}SELECT...]

IORDERBYlexpnJ[ASCIDESCJ

(FORUPDATE[OF[userjtableIview]column]

[NOWAITJ

詳細(xì)語法結(jié)構(gòu)需查閱最新ORACLE原版《ORACLE8iSQLREFERENCEMANUAL》或

?ORACLE9iSQLREFERENCEMANUAL》

§2.2SQL中的單記錄函數(shù)

許多資料(包括Oracle的資料)把Oracle的SQL語句中用到的函數(shù)分為單值函數(shù)和多

值函數(shù),單值函數(shù)又分為字符函數(shù)和數(shù)字函數(shù)。卜面分別介紹它們。

§2.2.1單記錄字符函數(shù)

函數(shù)說明

ASCII返回對應(yīng)字符的十進(jìn)制值

CHR給出十進(jìn)制返回字符

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

43

CONCAT拼接兩個(gè)字符串,與II相同

INITCAT將字符串的第一個(gè)字母變?yōu)榇髮?/p>

INSTR找出某個(gè)字符串的位置

INSTRB找出某個(gè)字符串的位置和字節(jié)數(shù)

LENGTH以字符給出字符串的長度

LENGTHB以字節(jié)給出字符串的長度

LOWER將字符串轉(zhuǎn)換成小寫

LPAD使用指定的字符在字符的左邊填充

LTRIM在左邊裁剪掉指定的字符

RPAD使用指定的字符在字符的右邊填充

RTRIM在右邊裁剪掉指定的字符

REPLACE執(zhí)行字符串搜索和替換

SUBSTR取字符串的子串

SUBSTRB取字符串的子串(以字節(jié))

SOUNDEX返回?個(gè)同音字符串

TRANSLATE執(zhí)行字符串搜索和替換

TRIM裁剪掉前面或后面的字符串

UPPER將字符串變?yōu)榇髮?/p>

NVL以?個(gè)值來替換空值

ASCII(<cl>)

?1>是字符串。返回與指定的字符對應(yīng)的十進(jìn)制數(shù)。

SQL>selectascii('A')A,ascii('a')a,ascii('O')zero,ascii('')spacefromdual;

AaZEROSPACE

65974832

SQL>selectascii('趙')zhao,length('趙')lengfromdual;

ZHAOLENG

547401

CHR(<I>[NCHAR])

給出整數(shù),返回對應(yīng)字符。如:

SQL>selectchr(54740)zhao,chr(65)chr65fromdual;

ZHC

趙A

CONCAT(<cl>,<c2>)

數(shù)據(jù)庫培訓(xùn)教材

培訓(xùn)ORACLE請聯(lián)系/p>

44

SQL>selectconcatfO10-',

溫馨提示

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

評論

0/150

提交評論