數(shù)據(jù)庫系統(tǒng)原理課程設計Oracle數(shù)據(jù)庫管理與設計_第1頁
數(shù)據(jù)庫系統(tǒng)原理課程設計Oracle數(shù)據(jù)庫管理與設計_第2頁
數(shù)據(jù)庫系統(tǒng)原理課程設計Oracle數(shù)據(jù)庫管理與設計_第3頁
數(shù)據(jù)庫系統(tǒng)原理課程設計Oracle數(shù)據(jù)庫管理與設計_第4頁
數(shù)據(jù)庫系統(tǒng)原理課程設計Oracle數(shù)據(jù)庫管理與設計_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、oracle數(shù)據(jù)庫管理與設計姓名: 學號:班級: 計算機 信息工程學院計算機系2012年3月1日星期四目 錄目 錄i前 言ii第1部分 oracle管理技術1實驗1 數(shù)據(jù)庫管理1實驗2 角色和用戶管理7實驗3 表和視圖管理10實驗4 索引和序列管理20實驗5 pl/sql編程23實驗6 使用游標、存儲過程和觸發(fā)器35實驗7 表空間管理39實驗8 文件管理51第2部分 oracle開發(fā)技術65前 言數(shù)據(jù)庫技術是計算機科學中發(fā)展最快的領域之一。隨著網(wǎng)絡技術的不斷發(fā)展,數(shù)據(jù)庫技術與網(wǎng)絡技術相結合,已經(jīng)廣泛應用于工作和生活的各個領域。同時,數(shù)據(jù)庫技術及其應用已經(jīng)成為國內外高校計算機專業(yè)和許多非計算機專

2、業(yè)的必修或選修課程。oracle是當前最流行的大型關系數(shù)據(jù)庫之一,支持包括32位windows、64位windows、os、hp-ux、aix5l、solaris和linux等多種操作系統(tǒng),擁有廣泛的用戶和大量的應用案例,已成為大型數(shù)據(jù)庫應用系統(tǒng)的首選后臺數(shù)據(jù)庫系統(tǒng)。本實驗課程要求學生全面了解oracle數(shù)據(jù)庫的特點和功能。從安裝配置、安全性、可用性、互操作性、pl/sql、可開發(fā)性、商業(yè)智能等多個方面,對oracle數(shù)據(jù)庫的各項技術進行學習和實驗。通過學習oracle數(shù)據(jù)庫安裝、管理及開發(fā),為今后從事oracle數(shù)據(jù)庫管理和開發(fā)工作打下良好的基礎。本實驗課程共分2個部分。第1部分為oracl

3、e的管理技術,由實驗1實驗8組成,包括數(shù)據(jù)庫管理、角色和用戶管理、表和視圖管理、索引和序列管理、pl/sql編程、以及使用游標、存儲過程和觸發(fā)器、表空間和文件管理等內容。第2部分為oracle開發(fā)技術,要求完成基于一定背景的管理信息系統(tǒng)的數(shù)據(jù)庫設計,如學生信息管理系統(tǒng)、圖書管理系統(tǒng)、人事信息管理系統(tǒng)、網(wǎng)上購物系統(tǒng)等。第1部分為基礎題、必做題,第2部分為提高題、選做題。第1部分 oracle管理技術實驗1 數(shù)據(jù)庫管理目的和要求(1)了解oracle數(shù)據(jù)庫的邏輯結構和物理結構;(2)了解oracle enterprise manager的使用情況;(3)學習關閉和啟動數(shù)據(jù)庫實例的方法;(4)學習使

4、用sql語句創(chuàng)建數(shù)據(jù)庫的方法;(5)學習使用sql語句刪除數(shù)據(jù)庫的方法。實驗準備首先要了解oracle數(shù)據(jù)庫的邏輯結構,包括方案(schema)對象、數(shù)據(jù)塊(data block)、區(qū)間(extent)、段(segment)和表空間(tablespace)等。數(shù)據(jù)庫由若干個表空間組成,表空間由表組成,段由區(qū)間組成,區(qū)間則由數(shù)據(jù)塊組成。oracle數(shù)據(jù)庫的物理結構由構成數(shù)據(jù)庫的操作系統(tǒng)文件所決定。每個oracle數(shù)據(jù)庫都由3種類型的文件組成:數(shù)據(jù)文件、日志文件和控制文件。這些數(shù)據(jù)庫文件為數(shù)據(jù)庫信息提供真正的物理存儲。enterprise manager 9i是oracle 9i提供的新的管理工具

5、,簡稱em。使用它可以完成啟動、關閉數(shù)據(jù)庫,創(chuàng)建、刪除數(shù)據(jù)庫等功能。只有系統(tǒng)管理員或擁有create database權限的用戶才能創(chuàng)建數(shù)據(jù)庫??梢栽趀nterprise manager中通過圖形界面創(chuàng)建數(shù)據(jù)庫,也可以使用create database語句創(chuàng)建數(shù)據(jù)庫。實驗內容本實驗主要包括以下內容。(1)練習使用不同方法啟動和關閉數(shù)據(jù)庫實例。(2)練習使用不同方法創(chuàng)建和刪除數(shù)據(jù)庫,要使操作的數(shù)據(jù)庫為用戶管理數(shù)據(jù)庫userman。1使用shutdown命令關閉數(shù)據(jù)庫實例練習使用shutdown命令關閉數(shù)據(jù)庫實例,分別按以下方式啟動數(shù)據(jù)庫實例。(1)正常關閉。等待當前所有已連接的用戶斷開與數(shù)據(jù)庫的

6、連接,然后關閉數(shù)據(jù)庫。正常關閉的語句如下:shutdown normal(2)立即關閉?;赝嘶顒邮聞仗幚聿嚅_所有已連接的用戶,然后關閉數(shù)據(jù)庫。立即關閉的語句如下:shutdown immediate(3)事務處理關閉。完成事務處理后斷開所有已連接的用戶,然后關閉數(shù)據(jù)庫。事務處理關閉的語句如下:shutdown transactional(4)中止關閉。中止數(shù)據(jù)庫實例,立即關閉數(shù)據(jù)庫。中止關閉的語句如下:shutdown abort每次執(zhí)行shutdown語句關閉數(shù)據(jù)庫實例之前,請執(zhí)行startup命令啟動數(shù)據(jù)庫。2使用startup命令啟動數(shù)據(jù)庫實例練習使用startup命令啟動數(shù)據(jù)庫實例,

7、分別按以下方式啟動數(shù)據(jù)庫實例。(1)啟動數(shù)據(jù)庫實例時不裝載數(shù)據(jù)庫。執(zhí)行此操作的命令如下:startup nomount(2)啟動數(shù)據(jù)庫實例,裝載數(shù)據(jù)庫,但不打開數(shù)據(jù)庫。通常在數(shù)據(jù)庫維護時執(zhí)行此操作,對應的命令如下:startup mount(3)啟動數(shù)據(jù)庫實例,裝載數(shù)據(jù)庫,打開數(shù)據(jù)庫。執(zhí)行此操作的命令如下:startup open(4)強制實例啟動。在遇到特殊異常的情況時,可以強制啟動實例。強制啟動實例的語句如下:startup force該語句將數(shù)據(jù)庫強行啟動到open模式。(5)啟動后限制對數(shù)據(jù)庫實例的訪問。執(zhí)行此操作的命令如下:startup restrict每次執(zhí)行startup語句啟

8、動數(shù)據(jù)庫實例之前,請執(zhí)行shutdown命令關閉數(shù)據(jù)庫。3使用oracle enterprise manager關閉數(shù)據(jù)庫實例按照下面的步驟關閉數(shù)據(jù)庫實例。(1)在數(shù)據(jù)庫處于打開狀態(tài)時,使用sys用戶以sysdba身份登錄到enterprise manager。在主目錄頁面的“一般信息”欄目中,可以看到“關閉”按鈕。(2)單擊“關閉”按鈕,可以打開“主機和目標數(shù)據(jù)庫身份證明”頁面。用戶需要擁有管理員的權限才能關閉數(shù)據(jù)庫實例,包括主機操作系統(tǒng)的管理員和當前數(shù)據(jù)庫實例的sysdba用戶。(3)輸入完成后,單擊“確定”按鈕,打開“確認關閉”頁面。(4)單擊“是”按鈕,開始關閉數(shù)據(jù)庫。關閉操作完成后,

9、單擊“刷新”按鈕,打開“啟動數(shù)據(jù)庫實例”頁面。 4使用oracle enterprise manager啟動數(shù)據(jù)庫實例按照下面的步驟啟動數(shù)據(jù)庫實例。(1)使用sys用戶以sysdba身份登錄到enterprise manager。(2)單擊“啟動”按鈕,打開“主機和目標數(shù)據(jù)庫身份證明”頁面。用戶需要擁有管理員的權限才能啟動數(shù)據(jù)庫實例,包括主機操作系統(tǒng)的管理員和當前數(shù)據(jù)庫實例的sysdba用戶。(3)輸入完成后,單擊“確定”按鈕,打開“確認打開”頁面。(4)單擊“是”按鈕,開始打開數(shù)據(jù)庫。5使用sql語句創(chuàng)建數(shù)據(jù)庫按照如下條件創(chuàng)建數(shù)據(jù)庫oracledb(以sysdba的用戶身份連接到數(shù)據(jù)庫)。(

10、1)設置sys用戶的密碼為syspwd,設置system用戶的密碼為systempwd。(2)使用已有的控制文件。(3)指定日志文件組redo01.log,大小為100mb;指定日志文件組redo02.log,大小為100mb。設置最大的日志文件數(shù)量為10。(4)定義日志文件組中最大的日志文件數(shù)量為5。(5)定義最大的數(shù)據(jù)文件數(shù)量為100。(6)定義數(shù)據(jù)庫中最大的實例數(shù)量為1。(7)定義存儲數(shù)據(jù)的字符集為us7ascii。(8)定義數(shù)據(jù)文件名稱為sys01.dbf,初始大小為100mb。(9)定義默認的表空間為tbs_1。(10)定義臨時表空間為tempts1。(11)定義臨時文件為temp0

11、1.dbf,大小為10mb。create database語句實例:create database oracledb user sys identified by syspwd user system identified by systempwd controlfile reuse logfile group 1 (redo01.log) size 100m , group 2 (redo02.log) size 100m , maxlogfiles 10 maxlogmembers 5 maxdatafiles 100 maxinstances 1 character set us7asc

12、ii datafile sys01.dbf size 100m reuse extent management local default tablespace tbs_1 default temporary tablespace tempts1 tempfile temp01.dbf size 10m reuse; 6使用sql語句刪除數(shù)據(jù)庫按照如下步驟刪除數(shù)據(jù)庫userman。(1)在刪除數(shù)據(jù)庫之前,需要用戶以sysdba或sysoper身份登錄,代碼如下:connect sys/syspwd as sysdba;其中syspwd為sys用戶的密碼,請根據(jù)實際情況輸入。(2)關閉數(shù)據(jù)庫,再

13、以mount模式啟動數(shù)據(jù)庫,代碼如下:shutdown immediate;startup mount;(3)刪除數(shù)據(jù)庫,代碼如下:drop database; 實驗2 角色和用戶管理目的和要求(1)了解oracle數(shù)據(jù)庫用戶和角色的概念;(2)學習使用sql語句創(chuàng)建oracle用戶;(3)學習使用sql語句創(chuàng)建oracle角色;(4)學習使用sql語句指定用戶的角色。實驗準備(1)了解oracle數(shù)據(jù)庫用戶可以分為6種類型,即數(shù)據(jù)庫管理員、安全官員、網(wǎng)絡管理員、應用程序開發(fā)員、應用程序管理員和數(shù)據(jù)庫用戶;(2)了解角色是對用戶的一種分類管理辦法,不同權限的用戶可以分為不同的角色;(3)了解使

14、用create role語句創(chuàng)建角色的方法;(4)了解使用drop role語句刪除角色的方法;(5)了解使用grant語句指定用戶角色的方法;(5)了解使用create user語句創(chuàng)建用戶的方法;(4)了解使用drop user語句刪除用戶的方法。實驗內容本實驗主要包括以下內容。(1)練習使用sql語句創(chuàng)建數(shù)據(jù)庫角色;(2)練習使用sql語句為數(shù)據(jù)庫角色授予權限;(3)練習使用sql語句指定用戶角色;(4)練習使用sql語句創(chuàng)建數(shù)據(jù)庫用戶。1使用sql語句創(chuàng)建數(shù)據(jù)庫角色參照下面的步驟練習使用create role語句創(chuàng)建數(shù)據(jù)庫角色。(1)以system用戶登錄到sql*plus。(2)使用

15、create role語句創(chuàng)建角色usermanrole,密碼為myrolepwd,代碼如下:create role usermanrole identified by myrolepwd;2使用sql語句為數(shù)據(jù)庫角色授權參照下面的步驟練習使用grant語句為數(shù)據(jù)庫角色授權。(1)以system用戶登錄到sql*plus。(2)使用grant語句將角色usermanrole授予connect和resource權限,代碼如下:-設置角色權限grant connect to usermanrole ;grant resource to usermanrole ;3使用sql語句創(chuàng)建數(shù)據(jù)庫用戶參照下

16、面的步驟練習使用create user語句創(chuàng)建數(shù)據(jù)庫用戶。(1)以system用戶登錄到sql*plus。(2)使用create user語句創(chuàng)建用戶usermanadmin,密碼為userpwd,代碼如下:create user usermanadmin identified by userpwd default tablespace users temporary tablespace temp;(3)使用grant語句對用戶usermanadmin授予系統(tǒng)權限unlimited tablespace,代碼如下:-設置系統(tǒng)權限grant unlimited tablespace to us

17、ermanadmin ;4使用sql語句指定用戶角色參照下面的步驟將用戶userman指定為角色usermanrole。(1)以system用戶登錄到sql*plus。(2)使用grant語句將用戶userman指定為角色usermanrole,代碼如下:grant usermanrole to usermanadmin ;實驗3 表和視圖管理目的和要求(1)了解oracle表和視圖的概念;(2)學習使用sql語句創(chuàng)建表;(3)學習使用select語句查詢數(shù)據(jù);(4)學習使用sql語句創(chuàng)建視圖。實驗準備(1)了解表是數(shù)據(jù)庫中最常用的數(shù)據(jù)存儲單元,它包括所有用戶可以訪問的數(shù)據(jù)。作為關系型數(shù)據(jù)庫,

18、oracle表由行和列組成。(2)視圖是一個虛擬的表,它在物理上并不存在。視圖可以把表或其它視圖的數(shù)據(jù)按照一定的條件組合起來,所以也可以把它看成是一個存儲的查詢。視圖并不包含數(shù)據(jù),它只是從基表中讀取數(shù)據(jù)。(3)了解使用create table語句創(chuàng)建表的方法。(4)了解使用select語句查詢數(shù)據(jù)的方法。(5)了解使用sql語句創(chuàng)建視圖的方法。實驗內容本實驗主要包括以下內容。(1)練習使用sql語句創(chuàng)建表;(2)練習使用sql語句向表中插入數(shù)據(jù);(3)練習使用sql語句修改表中的數(shù)據(jù);(4)練習使用sql語句刪除表中的數(shù)據(jù);(5)練習使用select語句查詢數(shù)據(jù);(6)練習使用sql語句創(chuàng)建視

19、圖。1使用sql語句創(chuàng)建表使用create table語句創(chuàng)建用戶信息表users,結構如表1所示。表1 表users的結構編 號字段名稱數(shù)據(jù)結構說 明1useridnumber用戶編號2usernamevarchar2 40用戶名3usertypenumber 1用戶類型(1 管理員用戶,2 普通用戶)4userpwdvarchar2 40參照下面的步驟練習使用create table語句創(chuàng)建表users。(1)以實驗2中創(chuàng)建的usermanadmin用戶登錄到sql*plus。(2)使用create table語句創(chuàng)建表users,代碼如下:create table usermanadmi

20、n.users(useridnumber primary key, usernamevarchar2(40) not null, usertypenumber(1), userpwdvarchar2(40);使用create table語句創(chuàng)建用戶登錄信息表logininfo,結構如表2所示。表2 表logininfo的結構編 號字段名稱數(shù)據(jù)結構說 明1useridnumber用戶編號2logintimechar(20)登錄時間參照下面的步驟練習使用create table語句創(chuàng)建表logininfo。(1)以實驗2中創(chuàng)建的usermanadmin用戶登錄到sql*plus。(2)使用crea

21、te table語句創(chuàng)建表logininfo,代碼如下:create table usermanadmin.logininfo(useridnumber, logintimechar(20) not null);2使用sql語句向表中插入數(shù)據(jù)使用insert語句向表users中插入用戶數(shù)據(jù),內容如表3所示。表3 表users中的數(shù)據(jù)useridusernameusertypeuserpwd1admin1adminpwd2user2userpwd3zhangsan2zhangsanpwd4lisi2lisipwd參照下面的步驟練習使用insert語句向表users中插入數(shù)據(jù)。(1)以實驗2中創(chuàng)建

22、的usermanadmin用戶登錄到sql*plus。(2)使用insert語句向表users中插入數(shù)據(jù),代碼如下:insert into usermanadmin.users values(1, admin, 1, adminpwd);insert into usermanadmin.users values(2, user, 2, userpwd);insert into usermanadmin.users values(3, zhangsan, 2, zhangsanpwd);insert into usermanadmin.users values(4, lisi, 2, lisip

23、wd);commit;使用insert語句向表logininfo中插入數(shù)據(jù)。內容如表4所示。參照下面的步驟練習使用insert語句向表logininfo中插入數(shù)據(jù)。(1)以實驗2中創(chuàng)建的usermanadmin用戶登錄到sql*plus。(2)使用insert語句向表logininfo中插入數(shù)據(jù),代碼如下:insert into usermanadmin.logininfo values(1, 2010-5-15 10:33:02,);insert into usermanadmin.logininfo values(1, 2010-5-16 08:34:13,);insert into us

24、ermanadmin.logininfo values(1, 2010-5-17 09:13:11,);insert into usermanadmin.logininfo values(2, 2010-5-15 07:35:02,);insert into usermanadmin.logininfo values(2, 2010-5-16 08:11:54,);insert into usermanadmin.logininfo values(2, 2010-5-17 09:13:11,);insert into usermanadmin.logininfo values(3, 2010-

25、5-15 08:34:02,);insert into usermanadmin.logininfo values(3, 2010-5-16 09:34:13,);insert into usermanadmin.logininfo values(3, 2010-5-17 10:13:09,);insert into usermanadmin.logininfo values(4, 2010-5-15 11:34:02,);insert into usermanadmin.logininfo values(4, 2010-5-16 13:34:13,);insert into usermana

26、dmin.logininfo values(4, 2010-5-17 15:13:12,);commit; 表4 表logininfo中的數(shù)據(jù)useridlogintime12010-5-15 10:33:0212010-5-16 08:34:1312010-5-17 09:13:1122010-5-15 07:35:0222010-5-16 08:11:5422010-5-17 09:13:1132010-5-15 08:34:0232010-5-16 09:34:1332010-5-17 10:13:0942010-5-15 11:34:0242010-5-16 13:34:1342010

27、-5-17 15:13:123使用sql語句修改表中的數(shù)據(jù)使用update語句可以修改表users中的數(shù)據(jù)。參照下面的步驟練習將表users中admin用戶的密碼修改為adminpassword。(1)以system用戶登錄到sql*plus。(2)使用update語句將表users中admin用戶的密碼修改為adminpassword,代碼如下:update usermanadmin.users set userpwd=adminpassword where username=admin(3)使用select語句查看用戶admin的密碼,代碼如下:select userpwd from us

28、ermanadmin.users where username=admin4使用sql語句刪除表中的數(shù)據(jù)使用delete語句可以刪除表users中的數(shù)據(jù)。參照下面的步驟練習將表users中zhansan用戶的記錄刪除。(1)以system用戶登錄到sql*plus。(2)使用delete語句將表users中zhangsan用戶的記錄刪除,代碼如下:delete from usermanadmin.users where username=zhangsan(3)使用select語句查看表users中的數(shù)據(jù),確認用戶zhangsan的記錄是否被刪除,代碼如下:select * from userm

29、anadmin.users5使用select語句查詢數(shù)據(jù)使用select語句查詢數(shù)據(jù)庫中的用戶數(shù)據(jù),分別按以下方式查詢數(shù)據(jù)庫。(1)查詢表users中的所有數(shù)據(jù)。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select * from usermanadmin.users*代表usermanadmin.users中的所有字段。(2)在返回結果中使用自定義標題。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select username as 用戶名, userpwd as 密碼 from usermanadmin.users(3)設置查詢條件。查詢所有普通用戶的信息

30、。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select * from usermanadmin.users where usertype=2查詢用戶admin的密碼信息。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select userpwd from usermanadmin.users where username=admin(4)對查詢結果進行排序。查詢所有普通用戶的信息,并按用戶名的降序排列結果集。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select * from usermanadmin.users order by usern

31、ame desc(5)對記錄進行統(tǒng)計。統(tǒng)計表users中共有多少個用戶記錄。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select count(*) from usermanadmin.users(6)實現(xiàn)連接查詢。查看每個用戶的登錄記錄。以system用戶登錄到sql*plus,然后執(zhí)行如下代碼:select u.username, a.logintime from usermanadmin.users u inner join usermanadmin.logininfo a on u.userid=a.userid;在上面的select語句中涉及兩個表:表users和表

32、logininfo。在from子句中,為每個表指定一個別名,表users的別名為u,表logininfo的別名為a。6使用sql語句創(chuàng)建視圖使用create view語句創(chuàng)建用戶登錄信息表userlogin,代碼如下:create view userloginasselect u.username, a.logintime from usermanadmin.users u inner join usermanadmin.logininfo a on u.userid=a.userid;select * from userlogin;實驗4 索引和序列管理目的和要求(1)了解索引的概念和作用;

33、(2)了解序列的概念和作用;(3)學習使用sql語句創(chuàng)建索引;(4)學習使用sql語句創(chuàng)建序列。實驗準備(1)了解索引是對數(shù)據(jù)庫表中一個或多個列的值進行排序的結構??梢岳盟饕焖僭L問數(shù)據(jù)庫表中的特定信息。(2)了解序列號是一個oracle整數(shù),最多可有38個數(shù)字。序列的作用是自動生成整型數(shù)值,作為表中標識字段的值。有許多表在創(chuàng)建時定義了一個標識字段,此字段的值需要由系統(tǒng)自動生成,每當插入一條新記錄時,此字段的值自動加1。在oracle中,這個功能由序列來實現(xiàn)。(3)了解使用create index語句創(chuàng)建索引的方法。(4)了解使用create sequence語句創(chuàng)建序列的方法。實驗內容本實

34、驗主要包括以下內容。(1)練習使用sql語句創(chuàng)建索引;(2)練習使用sql語句創(chuàng)建序列;1使用sql語句創(chuàng)建索引使用create index語句在users表的username字段上創(chuàng)建索引。代碼如下:create index index_username on usermanadmin.users (username)tablespace users;2在創(chuàng)建表的同時創(chuàng)建索引在使用create table語句創(chuàng)建表的同時,可以為指定字段創(chuàng)建索引。創(chuàng)建表employees,在字段empname上創(chuàng)建索引。表employees的結構如表5所示。表5 表employees的結構編 號字段名稱數(shù)據(jù)結

35、構說 明1empidnumber編號2empnamevarchar2(50)姓名3sexchar(2)性別4useridnumber用戶編號代碼如下:create table employees(empidnumber, empnamevarchar2(50) unique, sexchar(2), useridnumber);3使用sql語句創(chuàng)建序列使用create sequence語句創(chuàng)建序列。序列的最小值為1,并且沒有最大值限制。序列的初始值為1,序列間隔為1。代碼如下:create sequence emp_sminvalue 1nomaxvaluestart with 1increm

36、ent by 1nocyclecache 20;2在插入數(shù)據(jù)時使用序列在使用insert語句向表employees中插入數(shù)據(jù)時,可以使用序列emp_s生成字段empid的值,代碼如下:insert into employees (empid, empname) values(emp_s.nextval, employee1,);insert into employees (empid, empname) values(emp_s.nextval, employee2,);insert into employees (empid, empname) values(emp_s.nextval, e

37、mployee3,);commit;select * from employees實驗5 pl/sql編程目的和要求(1)了解pl/sql語言的結構;(2)了解pl/sql變量和常量的聲明和使用方法;(3)學習條件語句的使用方法;(4)學習分支語句的使用方法;(5)學習循環(huán)語句的使用方法;(6)學習使用oracle系統(tǒng)函數(shù)。實驗準備首先要了解pl/sql語言是結構化程序設計語言。塊(block)是pl/sql程序中最基本的結構,所有pl/sql程序都是由塊組成的。pl/sql的塊由變量聲明、程序代碼和異常處理代碼3部分組成。在pl/sql中,常量和變量在使用前必須聲明,可以使用declare對

38、變量進行聲明。實驗內容本實驗主要包括以下內容。(1)練習條件語句的使用方法;(2)練習分支語句的使用方法;(3)練習循環(huán)語句的使用方法;(4)練習使用oracle系統(tǒng)函數(shù)。1使用條件語句參照下面的步驟練習使用條件語句。(1)以system用戶登錄到sql*plus。(2)執(zhí)行如下程序,觀察結果。set serveroutput on;declare num integer := -11;begin if num 0 then dbms_output.put_line( 正數(shù) ); else dbms_output.put_line( 0 ); end if;end;2使用分支語句參照下面的步驟

39、練習使用分支語句。(1)以system用戶登錄到sql*plus。(2)執(zhí)行如下程序,觀察結果。set serveroutput on;declare varday integer := 3; result varchar(20);begin result := case varday when 1 then 星期一 when 2 then 星期二 when 3 then 星期三 when 4 then 星期四 when 5 then 星期五 when 6 then 星期六 when 7 then 星期日 else 數(shù)據(jù)越界 end; dbms_output.put_line( result

40、);end;3使用循環(huán)語句loopexitend語句:此語句的功能是重復執(zhí)行循環(huán)體中的程序塊,直到執(zhí)行exit語句,退出循環(huán)。loopexit whenend:此語句的功能是重復執(zhí)行循環(huán)體中的程序塊,直到滿足exit when后面的判斷語句時,退出循環(huán)。whileloopend loop語句:此語句的功能是當while后面的條件語句成立時,重復執(zhí)行循環(huán)體中的程序塊。參照下面的步驟練習使用循環(huán)語句。(1)以system用戶登錄到sql*plus。(2)執(zhí)行如下程序,觀察結果。程序一:set serveroutput on;declare v_num integer := 1; v_sum int

41、eger := 0;begin loop v_sum := v_sum + v_num; dbms_output.put_line( v_num ); if v_num = 3 then exit; end if; dbms_output.put_line( + ); v_num := v_num + 1; end loop; dbms_output.put_line( = ); dbms_output.put_line( v_sum );end;程序二:set serveroutput on;declare v_num integer := 1; v_sum integer := 0;beg

42、in loop v_sum := v_sum + v_num; dbms_output.put_line( v_num ); exit when v_num = 3; dbms_output.put_line( + ); v_num := v_num + 1; end loop; dbms_output.put_line( = ); dbms_output.put_line( v_sum );end;程序三: set serveroutput on;declare v_num integer := 1; v_sum integer := 0;begin while v_num =3 loop

43、v_sum := v_sum + v_num; dbms_output.put_line( v_num ); if v_num 3 then dbms_output.put_line( + ); end if; v_num := v_num + 1; end loop; dbms_output.put_line( = ); dbms_output.put_line( v_sum );end;4使用系統(tǒng)函數(shù)(1)數(shù)值型函數(shù)abs:返回給定數(shù)字表達式的絕對值。ceil:返回大于或等于所給數(shù)字表達式的最小整數(shù)。floor:返回小于或等于所給數(shù)字表達式的最大整數(shù)。power:返回給定表達式指定次方的值

44、。round:返回數(shù)字表達式并四舍五入為指定的長度或精度。(2)字符型函數(shù)ascii:返回字符表達式最左端字符的ascii代碼值。length:返回給定字符串表達式的字符(而不是字節(jié))個數(shù),其中不包含尾隨空格。upper:返回將小寫字符數(shù)據(jù)轉換為大寫的字符表達式。(3)日期型函數(shù)sysdate:返回當前日期和時間。to_char:轉換日期為字符串。last_day:返回指定日期所在月份的最后一天的日期。這個函數(shù)可以被用來確定當前月中還剩下多少天。months_between:返回兩個日期之間月的數(shù)目。(4)統(tǒng)計函數(shù)count:返回組中項目的數(shù)量。max:返回表達式的最大值。min:返回表達式的

45、最小值。參照下面的步驟練習使用系統(tǒng)函數(shù)。(1)以system用戶登錄到sql*plus。(2)執(zhí)行如下程序,觀察結果。程序一:set serveroutput on;begin dbms_output.put_line( abs(-4) );end;程序二:set serveroutput on;begin dbms_output.put_line( ceil(116.24) ); dbms_output.put_line( ceil(-112.75) ); dbms_output.put_line( ceil(0) );end;程序三:set serveroutput on;begin db

46、ms_output.put_line( floor(116.24) ); dbms_output.put_line( floor(-112.75) ); dbms_output.put_line( floor(0) );end;程序四:set serveroutput on;begin dbms_output.put_line( power(15, 4) );end;程序五:set serveroutput on;begin dbms_output.put_line( round(123.456, 2) ); dbms_output.put_line( round(123.456, 1) );

47、 dbms_output.put_line( round(123.456, 0) ); dbms_output.put_line( round(123.456, -1) ); dbms_output.put_line( round(123.456, -2) ); dbms_output.put_line( round(123.456, -3) );end;程序六:set serveroutput on;begin dbms_output.put_line( ascii(abc) );end;程序七:select username, length(username) from usermanad

48、min.userswhere usertype = 1;程序八:set serveroutput on;begin dbms_output.put_line( upper(abc) );end;程序九:set serveroutput on;begin dbms_output.put_line( sysdate );end;程序十:set serveroutput on;begin dbms_output.put_line( to_char(sysdate) );end;程序十一:set serveroutput on;begin dbms_output.put_line( last_day(

49、sysdate) );end;程序十二:set serveroutput on;declare date1 varchar(20) := 2010-05-17 ; date2 varchar(20) := 2010-10-17 ;begin dbms_output.put_line( months_between( to_date( date2, yyyy-mm-dd ), to_date( date1, yyyy-mm-dd ) ) ); end;程序十三:select count( username ) from usermanadmin.users;程序十四:select max( us

50、erid ) from usermanadmin.users;程序十五:select min( userid ) from usermanadmin.users;實驗6 使用游標、存儲過程和觸發(fā)器目的和要求(1)了解游標的概念和工作原理;(2)了解存儲過程的分類和使用方法;(3)了解觸發(fā)器的概念;(4)學習編寫和執(zhí)行自定義過程;(5)學習編寫和執(zhí)行自定義函數(shù);(6)學習創(chuàng)建和使用觸發(fā)器。實驗準備首先要了解游標是映射在結果集中一行數(shù)據(jù)上的位置實體,有了游標,用戶就可以訪問結果集中的任意一行數(shù)據(jù)了。將游標放置到某行后,即可對該行數(shù)據(jù)進行操作,最常見的操作是提取當前行數(shù)據(jù)。了解pl/sql包括3種存

51、儲過程,即過程、函數(shù)和程序包。了解觸發(fā)器是一種特殊的存儲過程,當指定表中的數(shù)據(jù)發(fā)生變化時自動運行。實驗內容本實驗主要包括以下內容。(1)練習創(chuàng)建和使用游標的方法;(2)練習編寫和執(zhí)行自定義過程的方法;(3)練習編寫和執(zhí)行自定義函數(shù)的方法;(4)練習創(chuàng)建和使用觸發(fā)器的方法。1創(chuàng)建和使用游標創(chuàng)建游標mycursor,從表logininfo中讀取指定用戶的登錄信息,操作步驟如下:(1)以usermanadmin用戶登錄到sql*plus。(2)執(zhí)行如下程序:/*打開顯示模式*/set serveroutput on;declare cursor mycursor( varusername varch

52、ar2 ) is select u.username, a.logintime from usermanadmin.users u, usermanadmin.logininfo a where u.userid = a.userid and u.username = varusername;begin -開始程序體 for var_loginrecord in mycursor( admin ) loop /*顯示保存在記錄變量var_loginrecord中的數(shù)據(jù)*/ dbms_output.put_line( 用戶名: | var_loginrecord.username | , 登錄時

53、間: | var_loginrecord.logintime ); end loop;end; -結束程序體2編寫和執(zhí)行自定義過程參照下面的步驟練習編寫和執(zhí)行自定義過程:(1)以usermanadmin用戶登錄到sql*plus。(2)執(zhí)行如下程序,觀察結果。/*創(chuàng)建示例過程resetpwd,此過程的功能是將表user中指定用戶的密碼重置為111111*/create or replace procedure usermanadmin.resetpwd( v_userid in number )asbegin update users set userpwd = 111111 where userid = v_userid;end;/*使用ex

溫馨提示

  • 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

提交評論