數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)-實(shí)驗(yàn)指導(dǎo)書_第1頁
數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)-實(shí)驗(yàn)指導(dǎo)書_第2頁
數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)-實(shí)驗(yàn)指導(dǎo)書_第3頁
數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)-實(shí)驗(yàn)指導(dǎo)書_第4頁
數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)-實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)實(shí)驗(yàn)指導(dǎo)書(Oracle版本)湖北汽車工業(yè)學(xué)院電氣與信息工程學(xué)院計(jì)算機(jī)工程系2011年10月說明數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)課程主要介紹基于J2EE平臺(tái)的數(shù)據(jù)庫系統(tǒng)開發(fā)技術(shù),實(shí)驗(yàn)涉及三個(gè)方面:(1)數(shù)據(jù)庫應(yīng)用高級(jí)編程技術(shù)。涉及PL/SQL編程知識(shí)(數(shù)據(jù)類型、程序結(jié)構(gòu))、存儲(chǔ)過程(包括存儲(chǔ)函數(shù))、觸發(fā)器和包,以及Oracle的事務(wù)處理與并發(fā)控制等內(nèi)容。(2)數(shù)據(jù)庫中間件應(yīng)用技術(shù)。涉及Oracle的JDBC編程,包括驅(qū)動(dòng)類型選擇、驅(qū)動(dòng)運(yùn)行環(huán)境配置、驅(qū)動(dòng)應(yīng)用編程步驟、LOB處理、事務(wù)處理、存儲(chǔ)過程調(diào)用等內(nèi)容。(3)數(shù)據(jù)庫應(yīng)用系統(tǒng)架構(gòu)。涉及C/S架構(gòu)、B/S架構(gòu)和數(shù)據(jù)庫系統(tǒng)綜合應(yīng)用等內(nèi)容。由于課程及實(shí)

2、驗(yàn)涉及的知識(shí)點(diǎn)多,內(nèi)容跨度大,要求學(xué)生上課認(rèn)真聽講,課后注意歸納總結(jié),實(shí)驗(yàn)前做好準(zhǔn)備。除了最后一個(gè)綜合應(yīng)用實(shí)驗(yàn)外,前面的實(shí)驗(yàn)均要求在如下表結(jié)構(gòu)上進(jìn)行。(1)學(xué)生表:有學(xué)生學(xué)號(hào)、學(xué)生姓名、學(xué)生性別、學(xué)生出生日期、學(xué)生所屬系部、學(xué)生平均成績、學(xué)生照片等列。期中學(xué)生學(xué)號(hào)為9位字符或數(shù)字編碼,有主碼約束,學(xué)生姓名有非空約束,學(xué)生性別有“男”或“女”的取值約束,學(xué)生的平均成績保留一位小數(shù),與學(xué)生的選課成績一致。表名用Student,各列依次用SNo(char(9))、SName(varchar2(30))、SSex(char(3))、SBirthday(Date)、SDepartment(varchar

3、2(60)、SAvgGrade(number(4,1))、SPicture(blob)表示。(2)課程表:有課程號(hào)、課程名、先導(dǎo)課程課程號(hào)、課程學(xué)分等列。期中課程號(hào)為4位數(shù)字或字符編碼,有主碼約束,先導(dǎo)課程課程號(hào)外碼引用課程號(hào),課程名有非空和唯一性約束,學(xué)分為大于0小于20的數(shù),保留一位小數(shù)。表名用Course,各列依次用CNo(char(4))、CName(varcahr2(60)、CPno(char(4))、CCredit(number(2,1))表示。(3)選課表:有學(xué)生學(xué)號(hào)、課程號(hào)、成績等列。期中學(xué)生好學(xué)號(hào)和課程號(hào)組成聯(lián)合主碼,成績?nèi)〔怀^100的整數(shù)。表名用SC,各列依次用SNo(c

4、har(9))、CNo(char(9))、Grade(number(3)。實(shí)驗(yàn)作業(yè)一并在實(shí)驗(yàn)報(bào)告上完成,作業(yè)成績納入實(shí)驗(yàn)考核成績。本實(shí)驗(yàn)指導(dǎo)書由彭彬老師寫,由于時(shí)間倉促,再加上實(shí)踐經(jīng)驗(yàn)的限制,錯(cuò)誤在所難免,歡迎各位老師、學(xué)生賜教()。 目錄實(shí)驗(yàn)環(huán)境介紹一、Oracle PL/SQL編程環(huán)境標(biāo)準(zhǔn)SQL語言是一次一集合的非過程化的查詢語言,不利于對(duì)數(shù)據(jù)庫中的數(shù)據(jù)作基于記錄的過程化處理。Oracle的PL/SQL對(duì)標(biāo)準(zhǔn)SQL進(jìn)行擴(kuò)充,成為一個(gè)完整的編程語言:如數(shù)據(jù)類型、變量與表達(dá)式、結(jié)構(gòu)化程序的結(jié)構(gòu)等。這里提供三種PL/SQL編程環(huán)境。SQL*PLUSSQL*Plus是一個(gè)交互式批處理查詢工具,在安

5、裝Oracle數(shù)據(jù)庫服務(wù)器時(shí)一并安裝。它有三種用戶界面:命令行用戶界面, Windows圖形用戶界面(GUI)和基于Web的用戶界面(iSQL * Plus)。也有單獨(dú)運(yùn)行的SQL*PLUS即時(shí)客戶端,它需要單獨(dú)安裝,并可以訪問其它數(shù)據(jù)庫服務(wù)器。SQL*plus中可以運(yùn)行SQL、PL/SQL、SQL*PLUS、操作系統(tǒng)命令,供于業(yè)務(wù)技術(shù)人員和系統(tǒng)管理員執(zhí)行以下任務(wù):開發(fā)和運(yùn)行批處理腳本,處理查詢結(jié)果,驗(yàn)證數(shù)據(jù)庫對(duì)象的定義以及管理數(shù)據(jù)庫。要注意SQL*plus是一個(gè)數(shù)據(jù)庫應(yīng)用成程序,它與Oracle數(shù)據(jù)庫服務(wù)器構(gòu)成一個(gè)兩層或三層的應(yīng)用架構(gòu)。期中命令行用戶界面的SQL*plus屬于兩層架構(gòu),SQL

6、*plus處于客戶端的地位,程序以命令行的形式輸出用戶程序或命令的處理結(jié)果。SQL*PLUS需要相關(guān)服務(wù)的支持。查看系統(tǒng)服務(wù),確保OracleServiceXE服務(wù)已經(jīng)啟動(dòng)(如圖1所示),也可以在DOS窗口運(yùn)行“net start OracleServiceXE”啟動(dòng)兩個(gè)服務(wù)”。圖1.1-1 Oracle系統(tǒng)服務(wù)以下介紹命令行界面。在Windows平臺(tái)選擇“開始”“運(yùn)行”,輸入“sqlplus”,或者在Windows的DOS窗口輸入“sqlplus”,即進(jìn)入命令行界面(如圖1.1-2所示)。處于安全考慮,Oracle對(duì)登錄的應(yīng)用程序要進(jìn)行“用戶名”和“密碼”驗(yàn)證,所以SQL*plus要登錄到服

7、務(wù)器,需要依次輸入用戶名、密碼。如“sys/sys as sysdba”,“drp/drp”。如果系統(tǒng)安裝有Oracle 10g Express,則可選擇“開始”“程序”“Oracle Database 10g Express Edition”“運(yùn)行SQL命令”,即進(jìn)入命令行界面(如圖1.1-3所示)。也可以用“SQLPLUS USERNAME/USERPASSSERVICE_NAME”直接登錄到數(shù)據(jù)庫服務(wù)器。當(dāng)想以SYS用戶登錄,但又不知道用戶密碼時(shí),可以用“SQLPLUS / AS SYSDBA”登錄數(shù)據(jù)庫,立即修改SYS用戶的登錄密碼。在命令行窗口,鍵入exit,即可退出命令行界面。圖1

8、.1-2 SQl*PLUS命令行界面圖1.1-3 通過Oracle 10g Express的快捷菜單進(jìn)入的SQL*PLUS命令行界面Express版本缺省創(chuàng)建了一個(gè)用戶方案HR,期中有表、視圖、存儲(chǔ)過程、觸發(fā)器、包等數(shù)據(jù)庫對(duì)象,以供初學(xué)者學(xué)習(xí)使用。但HR用戶是鎖定的,需要管理員解鎖。(1)、登錄到數(shù)據(jù)庫服務(wù)器 Connect username/userpassword as sysdba(2)、環(huán)境參數(shù)顯式環(huán)境參數(shù):SHOW ALL|參數(shù);設(shè)置環(huán)境參數(shù):SET 參數(shù)名 部分參數(shù):ARRAYSIZE: 設(shè)置SQL*PLUS從數(shù)據(jù)庫提取的行數(shù)AUTOCOMMIT:自動(dòng)提交DML語句LINESIZE

9、:每頁的寬度PAGESIZE:設(shè)置頁的行數(shù)SERVEROUTPUT:控制PL/SQL程序的結(jié)果是否在SQL*PLUS中輸出。(3)、用戶管理創(chuàng)建用戶:CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD;修改用戶:ALTER USER USER_NAME IDENTIFILED BY NEW_PASS_WORD; ALTER USER USER_NAME ACCOUNT LOCK; ALTER USER USER_NAME ACCOUNT UNLOCK; ALTER USER USER_NAME PASSWORD EXPIRE顯示當(dāng)前用戶:SHOW

10、 USER刪除用戶:DROP USER USER_NAME查看用戶信息:SELECT * FROM USER_USERS; ORACLE有一個(gè)特殊的用戶PUBLIC,請(qǐng)自己查閱相關(guān)信息。(4)、權(quán)限管理擁有CREATE SESSION權(quán)限的用戶才能登錄到數(shù)據(jù)庫??梢灾苯影褭?quán)限授給用戶,也可以先建立角色,再賦予用戶該角色,以實(shí)現(xiàn)權(quán)限分配授權(quán):GRANT 權(quán)限|角色 on 數(shù)據(jù)庫對(duì)象 TO USER_NAME WITH ADMIN OPTION 系統(tǒng)預(yù)定義的角色有:CONNECT、RESOURCE、DBA 如:GRANT CREATE SESSION TO USER DRP; GRANT CONN

11、ECT TO USER DRP; GRANT SELECT ON HR.EMP TO DRP; GRANT CREATE PROCEDUE TO USER DRP; GRANT CREATE ANY PROCEDURE TO USER DRP;回收:REVOKE 權(quán)限|角色 ON 數(shù)據(jù)庫對(duì)象 FROM USER_NAME;查看用戶當(dāng)前權(quán)限:SELECT * FROM USER_SYS_PRIVS; SELECT * FROM USER_TAB_PRIVS;(5)、查看數(shù)據(jù)庫對(duì)象信息 DESC 數(shù)據(jù)庫對(duì)象;1.2、PLSQL DEVELOPERPL/SQL Developer是一個(gè)可為Oracl

12、e數(shù)據(jù)庫開發(fā)存儲(chǔ)程序單元的集成開發(fā)環(huán)境(IDE),使用 PL/SQL Developer 可以方便地查看、編輯、編譯、糾正、測試、調(diào)試、優(yōu)化和查詢數(shù)據(jù)庫對(duì)象。(1)啟動(dòng)PLSQL DEVELOPERPLSQL Developer啟動(dòng)窗口如圖1.2-1所示,輸入用戶名、密碼、數(shù)據(jù)庫名,選擇合適的登錄方式后,程序進(jìn)入系統(tǒng)主窗口,如圖1.2-2所示。圖1.2-1 PLSQL DEVELOPER啟動(dòng)窗口對(duì)象瀏覽器窗口圖1.2-2 PLSQL DEVELOPER 主窗口(2)、執(zhí)行SQL語句在File的下拉菜單中選New(如圖1.2-3)SQL WINDOW(如圖1.2-4),進(jìn)入SQL Window窗

13、口,在此窗口可輸入SQL語句,并查看執(zhí)行結(jié)果。圖1.2-3 NEW窗口SQL 命令編輯區(qū),執(zhí)行結(jié)果出現(xiàn)在本窗口下方;如果執(zhí)行PL/SQL塊,則需要切換到OUTPUT查看輸出。命令執(zhí)行按鈕,同F(xiàn)8圖1.2-4 SQL Window窗口在File的下拉菜單中選NewCOMMAND WINDOW,進(jìn)入COMMAND Window窗口,此窗口類似SQLPLUS的GUI界面,也可執(zhí)行SQL命令。(3)創(chuàng)建數(shù)據(jù)庫對(duì)象可以在SQL WINDOW窗口或COMMAND WINDOW窗口中執(zhí)行創(chuàng)建數(shù)據(jù)庫對(duì)象的語句。也可以用PLSQL DEVELOPER提供的模版創(chuàng)建。此處以創(chuàng)建表為例加以說明。在File的下拉菜單

14、中選New,再選擇Table;或者直接在對(duì)象瀏覽器中的Tables目錄上點(diǎn)右鍵選New,出現(xiàn)如圖1.2-5所示界面。輸入表名A,再切換到Columns頁面,增加number類型的字段a,和varchar2(100)類型的字段b,如圖1.2-6所示。再切換到Indexes頁面,增加一個(gè)包含a字段的唯一索引IDX_A,如圖1.2-7所示。點(diǎn)View SQL,可以看到生成的SQL語句,如圖1.2-8所示。點(diǎn)Apply,即創(chuàng)建表A。這時(shí)可在右邊的對(duì)象瀏覽器中查看剛剛創(chuàng)建的表。在對(duì)象瀏覽器窗口查找到剛創(chuàng)建的表A。右鍵點(diǎn)擊A,在快捷菜單中選擇Edit data,進(jìn)入數(shù)據(jù)修改窗口,如圖1.2-9所示。點(diǎn)擊修

15、改按鈕,進(jìn)入修改狀態(tài);點(diǎn)擊追加、刪除按鈕,可以分別追加一行和刪除一行。要修改數(shù)據(jù),則修改相應(yīng)的列即可。修改數(shù)據(jù)后,記住點(diǎn)擊“記住修改”按鈕。可以多次修改。要提交修改,則需點(diǎn)擊提交按鈕COMMIT,要回滾修改,則需要點(diǎn)擊Rollback回滾按鈕ROLLBACK。圖1.2-5 Table模版一般信息圖1.2-6 Table模版列定義圖1.2-7 Table模版索引圖1.2-8 Table模版SQL語句在File的下拉菜單中選NewPROGRAM WINDOWPROCEDURE(如圖1.2-10所示),進(jìn)入存儲(chǔ)過程模版向?qū)Т翱?,輸入過程名和參數(shù)后,點(diǎn)擊“OK”進(jìn)入編程窗口,在此可編輯存儲(chǔ)過程。編輯完

16、成后點(diǎn)擊F8,系統(tǒng)對(duì)程序進(jìn)行編譯,如果出現(xiàn)編譯錯(cuò)誤,會(huì)給出錯(cuò)誤信息,并把光標(biāo)定位到相應(yīng)的行。存儲(chǔ)函數(shù)、包的編輯、編譯同上。Insert編輯切換Delete記入改變追加CommitRollback圖1.2-9 表的編輯修改圖1.2-10 程序編輯菜單(4)調(diào)試存儲(chǔ)函數(shù)/存儲(chǔ)過程首先打開調(diào)試窗口。打開一個(gè)空白的SQL窗口,輸入函數(shù)或存儲(chǔ)過程名,如EXISTOBJ,在對(duì)象名上點(diǎn)右鍵,再選擇Test(如圖1.2-11所示);或在對(duì)象瀏覽器中展開函數(shù)或存儲(chǔ)過程目錄,選擇所需調(diào)試的函數(shù)或存儲(chǔ)過程,如EXISTOBJ,點(diǎn)右鍵,再選擇Test(如圖1.2-12所示)可進(jìn)入調(diào)試窗口。圖1.2-11 進(jìn)入調(diào)試窗口

17、圖1.2-12 進(jìn)入調(diào)試窗口圖1.2-13 調(diào)試窗口選擇了Test以后打開的調(diào)試窗口如圖1.2-13所示。其中的result是返回的結(jié)果參數(shù),其他是需要傳入的參數(shù)。具體調(diào)試過程,請(qǐng)查閱相關(guān)資料。1.3、APPLICATION EXPRESSAPEX是一個(gè)基于Oracle數(shù)據(jù)庫的Web應(yīng)用程序快速開發(fā)工具,它提供三大Oracle應(yīng)用開發(fā)工具:應(yīng)用程序構(gòu)建器(APPLICATION BUILDER)。創(chuàng)建數(shù)據(jù)庫驅(qū)動(dòng)的動(dòng)態(tài)WeB應(yīng)用程序。SQL 工作室(SQL WORKSHOP)。瀏覽數(shù)據(jù)庫對(duì)象,運(yùn)行SQL查詢、PL/SQL程序及圖形化的查詢構(gòu)建器。使用程序(UTILITIES)。允許從純文本和電子

18、表格上傳和下載數(shù)據(jù)(數(shù)據(jù)的導(dǎo)入與導(dǎo)出)。用戶可以使用其中的SQL 工作室,瀏覽數(shù)據(jù)庫的用戶、表、存儲(chǔ)過程、存儲(chǔ)函數(shù)、觸發(fā)器、包等數(shù)據(jù)庫對(duì)象,并完成各種數(shù)據(jù)庫對(duì)象的創(chuàng)建工作。(1)APEX主窗口選擇“開始”“程序”“Oracle Database 10g Express Edition”“轉(zhuǎn)至數(shù)據(jù)庫主頁”,即進(jìn)入APEX登錄也賣弄,如圖1.3-1所示。圖1.3-1 APEX登錄窗口輸入用戶名SYS,密碼SYS,即以SYS用戶登錄到APEX主窗口,如圖1.3-2所示。當(dāng)前用戶注銷登錄圖1.3-2 APEX主窗口上述主窗口有管理、對(duì)象瀏覽器、SQL、實(shí)用程序四個(gè)選項(xiàng)。選擇管理,進(jìn)入管理窗口,依次可以

19、查看系統(tǒng)存儲(chǔ)選項(xiàng)、查看內(nèi)存使用信息、管理用戶、監(jiān)視服務(wù)器運(yùn)行、查看服務(wù)器各種參數(shù),如圖1.3-3所示。圖1.3-3 APEX管理窗口進(jìn)入對(duì)象瀏覽器,可以瀏覽表、視圖、索引、序列、類型、包、過程、函數(shù)、觸發(fā)器、數(shù)據(jù)庫鏈接、同義詞等各種對(duì)象;查看這些對(duì)象的結(jié)構(gòu)、代碼;修改對(duì)象、創(chuàng)建對(duì)象,如圖1.3-4所示。1.3-4 APEX對(duì)象瀏覽窗口進(jìn)入SQL,可以執(zhí)行SQL命令、運(yùn)行SQL腳本、使用查詢構(gòu)建器構(gòu)建查詢。進(jìn)入實(shí)用程序可以加載下載數(shù)據(jù)、創(chuàng)建DLL鏈接庫、創(chuàng)建各種對(duì)象報(bào)表。1.4 小結(jié)建議實(shí)用APEX運(yùn)行、測試各種代碼;用PLSQL DEVELOPER調(diào)試、修改包、函數(shù)、過程;簡單的管理功能實(shí)用S

20、QL*PLUS。二、J2EE應(yīng)用編程環(huán)境NetBeans是SUN公司推薦的一個(gè)免費(fèi)的J2EE開發(fā)環(huán)境,期中版本對(duì)UML的支持較好,建議選用。2.1、J2EE項(xiàng)目類型啟動(dòng)NetBeans,即進(jìn)入項(xiàng)目開發(fā)平臺(tái)。依據(jù)系統(tǒng)安裝內(nèi)容的不同,實(shí)用NetBeans所能開發(fā)的項(xiàng)目也有所不同。選擇“文件”“新建項(xiàng)目”,即進(jìn)入如圖2.11所示的項(xiàng)目類型選擇窗口。(1)Java選擇“Java”可創(chuàng)建各種標(biāo)準(zhǔn)的Java SE應(yīng)用程序(包括控制臺(tái)程序、窗口界面程序)。圖2.1-1 項(xiàng)目選擇窗口選擇“Java桌面程序”可創(chuàng)建基于 Swing 的應(yīng)用程序。NetBeans提供一個(gè)基于JSwing 的桌面應(yīng)用程序構(gòu)建框架,相

21、應(yīng)的模板提供基本的應(yīng)用程序基礎(chǔ)結(jié)構(gòu),如菜單欄、永久保持窗口狀態(tài)以及狀態(tài)欄。利用此模板,還可以生成訪問數(shù)據(jù)庫的 GUI 界面代碼。如果用戶理解數(shù)據(jù)庫系統(tǒng)架構(gòu)的知識(shí),了解Jswing,實(shí)用該框架可大大簡化企業(yè)級(jí)C/S架構(gòu)應(yīng)用的開發(fā)。選擇“基于現(xiàn)有源代碼的Java項(xiàng)目”可以打開一個(gè)現(xiàn)有的Java項(xiàng)目,比如基于Eclips開發(fā)的Java項(xiàng)目。下面介紹創(chuàng)建Java SE項(xiàng)目的過程。選擇Java應(yīng)用程序,進(jìn)入新建Java應(yīng)用程序窗口,如圖2.2所示。注意,最好不要在各選項(xiàng)中圖2.1-2 Java SE應(yīng)用項(xiàng)目設(shè)置窗口輸入中文字符。如果選擇了“使用專用文件夾存儲(chǔ)庫”,則選購目將有一個(gè)專門的文件夾來存放導(dǎo)入的

22、第三方庫。如果選擇了“創(chuàng)建主類”,則將創(chuàng)建一個(gè)項(xiàng)目的主類(如Main.Java)。如果你選擇運(yùn)行項(xiàng)目就會(huì)自動(dòng)加載該類(即通過該類運(yùn)行項(xiàng)目)。Java SE項(xiàng)目的項(xiàng)目瀏覽窗口如圖2.1-3所示。節(jié)點(diǎn)“源包”下按照package的層次要求依次存放系統(tǒng)的Java類。如果要在某個(gè)包下添加一個(gè)類,只須右鍵點(diǎn)擊相應(yīng)包節(jié)點(diǎn),在隨后的快捷菜單中選擇即可。節(jié)點(diǎn)“庫”下存放第三方庫。如果要寫數(shù)據(jù)庫應(yīng)用程序,就需要把驅(qū)動(dòng)程序加到“庫”節(jié)點(diǎn)下。右鍵點(diǎn)擊“庫”,選擇“添加jar/文件夾”后按照提示,即可把Oracle的JDBC驅(qū)動(dòng)加載到項(xiàng)目中來。圖2.1-3 Java SE項(xiàng)目(2)Java Web選擇“Java We

23、b”可創(chuàng)建基于B/S架構(gòu)的應(yīng)用程序,如圖2.1-4所示。選擇“Web應(yīng)用程序”進(jìn)入Web應(yīng)用程序項(xiàng)目設(shè)置窗口,如圖2.1-5所示。輸入項(xiàng)目名稱、項(xiàng)目位置、設(shè)置相關(guān)選項(xiàng)后,點(diǎn)擊“下一步”,進(jìn)入項(xiàng)目服務(wù)器設(shè)置窗口,如圖2.1-6所示。圖2.1-4 Java Web項(xiàng)目選擇窗口“服務(wù)器”選項(xiàng)設(shè)置將用于項(xiàng)目測試的Web服務(wù)器軟件,一般選擇Apache tomcat?!癑ava EE版本”設(shè)置Java EE的版本(影響Servlet、JSP等的版本),“上下文路徑”設(shè)置項(xiàng)目的上下文。如圖設(shè)置為“Database2”,則訪問該項(xiàng)目的路徑就為http:/localhost:8080/Database2/*。

24、點(diǎn)擊“下一步”進(jìn)入框架設(shè)置窗口,如圖2.1-6所示。如果你向在項(xiàng)目中使用Struts、Spring、Hibernate、JSF等框架,就勾選相應(yīng)項(xiàng)。點(diǎn)擊“完成”,將結(jié)束Java Web項(xiàng)目的創(chuàng)建工作。圖2.1-5 Web項(xiàng)目設(shè)置窗口圖2.1-5 服務(wù)器設(shè)置窗口圖2.1-6 框架設(shè)置窗口Java Web項(xiàng)目的項(xiàng)目瀏覽窗口如圖2.1-7所示。節(jié)點(diǎn)“Web頁”下存放頁面程序,如HTML文件、JSP文件。在此節(jié)點(diǎn)下還可根據(jù)項(xiàng)目的需要,創(chuàng)建基本不同的文件夾,一個(gè)文件夾對(duì)應(yīng)一個(gè)功能模塊。節(jié)點(diǎn)“源包”下存放項(xiàng)目的各種Java文件,比如JavaBean、Servlet、領(lǐng)域模型、實(shí)體類等。節(jié)點(diǎn)“配置文件”下的

25、“Web.xml”文件是最重要的配置文件,用戶開發(fā)的Sevlet均需要在此配置。節(jié)點(diǎn)“庫”下存放第三方庫。如果要寫數(shù)據(jù)庫應(yīng)用程序,同樣需要把驅(qū)動(dòng)程序加到“庫”節(jié)點(diǎn)下。圖2.1-7 Java Web項(xiàng)目2.2、一個(gè)可訪問數(shù)據(jù)庫的Java控制臺(tái)項(xiàng)目新建Java項(xiàng)目Database1,在項(xiàng)目的“源包”節(jié)點(diǎn)添加一個(gè)“JdbcHelper”包,在改包下新建一個(gè)Java類“JdbcUtil.java”,該類使用單例模式涉及,提供創(chuàng)建鏈接對(duì)象,釋放相關(guān)資源功能,代碼如下。 在“Database1”包下創(chuàng)建“LobTest.java”,該類可訪問數(shù)據(jù)庫的大對(duì)象,代碼如下:2.3、一個(gè)Java Web項(xiàng)目新建W

26、eb項(xiàng)目Database2,在“Web頁”節(jié)點(diǎn)下創(chuàng)建文件夾“l(fā)ogin”,專門存放項(xiàng)目“登錄”模塊的頁面程序。在“l(fā)ogin”文件夾下創(chuàng)建一個(gè)Login.jsp程序,該程序提交一個(gè)表單LoginForm,該表單能夠接受用戶輸入的登錄信息,并把該信息提交給服務(wù)器上的Servlet程序LoginServlet.java。LoginServlet.java提取接收到的信息,把它們封裝到一個(gè)LoginUser對(duì)象,然后提交給一個(gè)DAO(數(shù)據(jù)訪問)對(duì)象LoginUserDaoImp去處理,LoginUserDaoImp查詢數(shù)據(jù)庫,并返回結(jié)果給LoginServlet,LoginServlet根據(jù)返回結(jié)果

27、確定用戶登錄結(jié)果。2.3.1、創(chuàng)建LoginUser.java該類封裝登錄用戶信息,屬于三層架構(gòu)的業(yè)務(wù)邏輯層的領(lǐng)域模型。在“源包”節(jié)點(diǎn)創(chuàng)建包“”,在該包中新建一個(gè)Java類LoginUser.java。如圖2.3-1所示。在代碼編輯區(qū),右擊類LoginUser的內(nèi)部區(qū)域,在出現(xiàn)的快捷菜單中選擇“插入代碼”“添加屬性”,出現(xiàn)屬性添加窗口,如圖2.3-2所示,完成屬性u(píng)serName的編碼。同法完成userPass的編碼,所得結(jié)果如圖2.3-3所示。、創(chuàng)建LoginUserDao.java和LoginUserDaoImp.java這兩個(gè)類屬于三層架構(gòu)中數(shù)據(jù)層的數(shù)據(jù)訪問類,前者是一個(gè)接口,后者是實(shí)現(xiàn)

28、類。圖2.3-1 LoginUser.java編輯窗口圖2.3-2 創(chuàng)建屬性圖2.3-3 LoginUser.javaLoginUserDao.java和LoginUserDaoImp.java的代碼如下:、LoginServlet.javaLoginServlet.java屬于三層架構(gòu)的表示層。新建包“”,右擊該包,選擇新建Servlet,輸入“LoginServlet”,窗口如圖2.3-4所示。接著需要確定該Servlet在Web.xml中的配置,如圖2.3-5。點(diǎn)擊“完成”,NetBeans將創(chuàng)建LoginServlet類的框架,并在配置文件添加相應(yīng)信息。圖2.3-4 新建Servlet

29、窗口圖2.3-5 Servlet配置窗口Web.xml文件內(nèi)容如下:LoginServlet類繼承自HttpServlet類,NetBeans自動(dòng)重載了DoGet()和DoPost(),并把上述方法的調(diào)用都轉(zhuǎn)向了processRequest()方法,所以我們只需完成該方法即可,代碼如下。這里用到了J2EE平臺(tái)的兩種重定向技術(shù)、以及用Session追蹤用戶的技術(shù)。、Login.jsp與LoginSuccess.jsp在“Web頁”節(jié)點(diǎn)下創(chuàng)建“l(fā)ogin”文件夾,在該文件下創(chuàng)建Login.jsp,如圖2.3-6所示。圖2.3-6 Login.jsp編輯窗口把“Meta數(shù)據(jù)”標(biāo)簽拖到在上述窗口的當(dāng)前

30、光標(biāo)指定位置,添加控制頁面緩存的語句,得到head部分如下:在body部分,把表單標(biāo)簽、表格標(biāo)簽、文本輸入標(biāo)簽、按鈕標(biāo)簽依次拖到合適的位置,最后得到如下代碼:LoginSuccess.jsp中先對(duì)訪問用戶進(jìn)行省份識(shí)別,如果當(dāng)前session中沒有存儲(chǔ)USER對(duì)象,說明來訪用戶沒有經(jīng)過登錄驗(yàn)證,系統(tǒng)被重定向到登錄頁面,代碼如下:項(xiàng)目的結(jié)構(gòu)如圖2.3-7所示。項(xiàng)目運(yùn)行的登錄窗口如圖2.3-8所示。圖2.3-7項(xiàng)目結(jié)構(gòu) 圖2.3-8 項(xiàng)目運(yùn)行登錄窗口三、數(shù)據(jù)庫表結(jié)構(gòu)本課程的實(shí)驗(yàn)一、實(shí)驗(yàn)二、實(shí)驗(yàn)三、實(shí)驗(yàn)四所使用的表結(jié)構(gòu)均可用如下的SQL語句創(chuàng)建。CREATE TABLE Student( SNO CH

31、AR (9) PRIMARY KEY,Sname VARCHAR(20) not null,SSex CHAR(3) CHECK(Ssex in(男,女),Sage NUMBER(2,0),Sdept varCHAR2(60),SAvgGrade number(4,1),SPicture BLOB)CREATE TABLE Course( Cno CHAR(4) PRIMARY KEY, Cname varCHAR2(60) unique not null,Cpno CHAR(4),Ccredit number(2,1), FOREIGN KEY (Cpno) REFERENCES Cours

32、e(Cno)CREATE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade number(3,0),PRIMARY KEY(Sno,Cno),FOREIGN KEY (Sno) REFERENCES Student(Sno),FOREIGN KEY (Cno) REFERENCES Course(Cno)實(shí)驗(yàn)一 存儲(chǔ)子程序1、實(shí)驗(yàn)?zāi)康?、掌握存?chǔ)過程的概念,學(xué)會(huì)編寫簡單的存儲(chǔ)過程及其使用。、了解存儲(chǔ)過程調(diào)用。2、實(shí)驗(yàn)性質(zhì)驗(yàn)證性實(shí)驗(yàn)3、實(shí)驗(yàn)導(dǎo)讀3.1、PL/SQL基礎(chǔ)知識(shí)(1)數(shù)據(jù)類型PL/SQL有四種數(shù)據(jù)類型:標(biāo)量類型、引用類型、復(fù)合類型和大對(duì)象類型。標(biāo)量類型只能存儲(chǔ)

33、單值的數(shù)據(jù),其中:存儲(chǔ)字符/字符串的有CHAR, CHARACTER, LONG, LONG RAW, NCHAR, NVARCHAR2, RAW, ROWID, STRING, UROWID, VARCHAR, VARCHAR2。LONG和LONG RAW不推薦使用。存儲(chǔ)數(shù)字的有BINARY_DOUBLE, BINARY_FLOAT, BINARY_INTEGER, DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INT, INTEGER, NATURAL, NATURALN, NUMBER,NUMERIC, PLS_INTEGER, POSITIVE, POS

34、ITIVEN, REAL, SIGNTYPE, SMALLINT。存儲(chǔ)布爾值的有BOOLEAN。存儲(chǔ)日期時(shí)間的有DATE、TIMESTAMP、TIMESTAMP WITH TIMEZONE、TIMESTAMP WITH LOCAL、INTERVAL。存儲(chǔ)二進(jìn)制的有RAW、LONG RAW。引用類型有REF CURSOR和REF。大對(duì)象數(shù)據(jù)類型有BLOB、CLOB、BFILE。復(fù)合類型需要用戶自己定義。如果需要在一個(gè)結(jié)構(gòu)中存儲(chǔ)不同類型的數(shù)據(jù),就用RECORD(記錄)。如果需要在一個(gè)結(jié)構(gòu)中存儲(chǔ)相同類型的數(shù)據(jù)(對(duì)象),就用PL/SQL的集合類型。PL/SQL中集合類型分為:變長數(shù)組VARRAYS能保

35、存固定數(shù)量的元素(但可以在運(yùn)行時(shí)改變它的大小),使用有序數(shù)字作為下標(biāo),與JAVA語言中的數(shù)組類似。定義語法為TYPE type_nameISVARRAY|VARYINGARRAY(size_limit)OFelement_typeNOTNULL;嵌套表可容納任意個(gè)數(shù)的元素,使用有序數(shù)字作下標(biāo),與JAVA語言中的SET類似。定義語法為TYPEtype_nameISTABLEOFelement_typeNOTNULL;索引表,也叫關(guān)聯(lián)數(shù)組,可容納元素,但使用關(guān)鍵字存取,與JAVA語言中的Hash表類似。定義語法為TYPEtype_nameISTABLEOFelement_typeNOTNULL I

36、NDEXBYBINARY_INTEGER|PLS_INTEGER|VARCHAR2(size_limit);集合類型提供幾個(gè)屬性或方法方便對(duì)其中元素的存?。篊OUNT屬性,返回集合中元素的個(gè)數(shù)DELETE方法,DELETE刪除最后整個(gè)集合,DELETE(X)刪除集合中的第X個(gè)元素,DELETE(X,Y)刪除集合中從X到Y(jié)的元素。EXISTS(x)方法,判斷位于位置x處的元素是否存在,如果存在則返回TRUE,如果x大于集合的最大范圍,則返回FALSE。EXTEND方法,沒帶參數(shù)的EXTEND將一個(gè)NULL元素添加到集合的末端,EXTEND(x)將x個(gè)NULL元素添加到集合的末端,EXTEND(x

37、,y)將x個(gè)位于y的元素添加到集合的末端。FIRST屬性,返回集合第一個(gè)元素的位置。LAST屬性,返回集合最后一個(gè)元素的位置。NEXT(x)屬性,返回位置為x處的元素后面的那個(gè)元素。PRIOR(x)屬性,返回x處的元素前面的那個(gè)元素。TRIM方法,沒有參數(shù)的TRIM是從集合中末端刪除一個(gè)元素。 TRIM(x)從集合末端刪除x個(gè)元素,其中x要小于集合的COUNT數(shù),否則系統(tǒng)會(huì)提示出錯(cuò)。集合類中數(shù)據(jù)的便利可用下面的代碼段:v_Count:=v_Pwd.FIRST; WHILE v_Count=v_Pwd.LAST LOOP DBMS_OUTPUT.PUT_LINE(v_Pwd(v_Count);

38、v_Count:=v_Pwd.NEXT(v_Count); END LOOP;編程過程中可引用數(shù)據(jù)庫表的列的數(shù)據(jù)類型:表名.列%TYPE(注意,變量名%TYPE也可用);也可以引用數(shù)據(jù)庫表記錄的數(shù)據(jù)類型:表名%ROWTYPE;還可引用游標(biāo)返回的結(jié)果集的記錄類型:游標(biāo)名ROWTYPE。(2)運(yùn)算符及其運(yùn)算級(jí)別冪運(yùn)算(*)、符號(hào)運(yùn)算(、)、乘除運(yùn)算(*、/)、加減及連接運(yùn)算(、|)、比較運(yùn)算(=, , =, , !=, =, =, IS NULL, LIKE, BETWEEN, IN)、邏輯運(yùn)算(NOT、AND、OR)(3)程序控制結(jié)構(gòu)三種控制結(jié)構(gòu)如下:IFTHEN語句:DECLARE sales

39、 NUMBER(8,2) := 10100; quota NUMBER(8,2) := 10000; bonus NUMBER(6,2); emp_id NUMBER(6) := 120;BEGIN IF sales (quota + 200) THEN bonus := (sales - quota)/4; UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id; END IF;END;IFTHEN.ELSE語句:DECLARE sales NUMBER(8,2) := 12100; quota NUMB

40、ER(8,2) := 10000; bonus NUMBER(6,2); emp_id NUMBER(6) := 120;BEGIN IF sales (quota + 200) THEN bonus := (sales - quota)/4; ELSE bonus := 50; END IF; UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id;END;IF嵌套語句:DECLARE sales NUMBER(8,2) := 12100; quota NUMBER(8,2) := 10000; bonu

41、s NUMBER(6,2); emp_id NUMBER(6) := 120;BEGIN IF sales (quota + 200) THEN bonus := (sales - quota)/4; ELSE IF sales quota THEN bonus := 50; ELSE bonus := 0; END IF; END IF; UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id;END;IFTHENELSIF語句:DECLARE grade CHAR(1);BEGIN grade := B

42、; IF grade = A THEN DBMS_OUTPUT.PUT_LINE(Excellent); ELSIF grade = B THEN DBMS_OUTPUT.PUT_LINE(Very Good); ELSIF grade = C THEN DBMS_OUTPUT.PUT_LINE(Good); ELSIF grade = D THEN DBMS_OUTPUT. PUT_LINE(Fair); ELSIF grade = F THEN DBMS_OUTPUT.PUT_LINE(Poor); ELSE DBMS_OUTPUT.PUT_LINE(No such grade); END

43、 IF;END;CASEWHEN語句:DECLARE grade CHAR(1);BEGIN grade := B; CASE grade WHEN A THEN DBMS_OUTPUT.PUT_LINE(Excellent); WHEN B THEN DBMS_OUTPUT.PUT_LINE(Very Good); WHEN C THEN DBMS_OUTPUT.PUT_LINE(Good); WHEN D THEN DBMS_OUTPUT.PUT_LINE(Fair); WHEN F THEN DBMS_OUTPUT.PUT_LINE(Poor); ELSE DBMS_OUTPUT.PUT

44、_LINE(No such grade); END CASE;END;SERACHED CASE語句:DECLARE grade CHAR(1);BEGIN grade := B; CASE WHEN grade = A THEN DBMS_OUTPUT.PUT_LINE(Excellent); WHEN grade = B THEN DBMS_OUTPUT.PUT_LINE(Very Good); WHEN grade = C THEN DBMS_OUTPUT.PUT_LINE(Good);WHEN grade = D THEN DBMS_OUTPUT.PUT_LINE(Fair); WHE

45、N grade = F THEN DBMS_OUTPUT.PUT_LINE(Poor); ELSE DBMS_OUTPUT.PUT_LINE(No such grade); END CASE;END;LOOP循環(huán):DECLARE credit_rating NUMBER := 0;BEGIN LOOP credit_rating := credit_rating + 1;EXIT WHEN credit_rating3 IF credit_rating 3 THEN EXIT; - exit loop immediately END IF; END LOOP; - control resume

46、s here DBMS_OUTPUT.PUT_LINE (Credit rating: | TO_CHAR(credit_rating); IF credit_rating 3 THEN RETURN; - use RETURN not EXIT when outside a LOOP END IF; DBMS_OUTPUT.PUT_LINE (Credit rating: | TO_CHAR(credit_rating); END;WHILE循環(huán):done := FALSE;WHILE NOT done LOOPsequence_of_statementsdone := boolean_ex

47、pression;END LOOP;FOR循環(huán):DECLARE p NUMBER := 0;BEGIN FOR k IN 1.500 LOOP - calculate pi with 500 terms p := p + ( ( (-1) * (k + 1) ) / (2 * k) - 1) ); END LOOP;p := 4 * p; DBMS_OUTPUT.PUT_LINE( pi is approximately : | p ); - print resultEND;BEGIN FOR i IN REVERSE 1.3 LOOP - assign the values 1,2,3 to

48、 i DBMS_OUTPUT.PUT_LINE (TO_CHAR(i); END LOOP;END;(4)幾個(gè)系統(tǒng)函數(shù)用于異常處理的SQLCODE、SQLERRM,用于類型轉(zhuǎn)換的HEXTORAW、RAWTOHEX、TO_CHAR、TO_DATE、TO_NUMBER,用于NULL處理的NVL、NULLIF。(5)偽列用于序列的CURRVAL和NEXTVAL、用于樹形結(jié)構(gòu)查詢的LEVEL、用于追蹤行物理地址的ROWID、用于追蹤行號(hào)的ROWNUM。3.2、游標(biāo)游標(biāo)是DBMS為用戶提供的一種特殊控制結(jié)構(gòu),由一個(gè)內(nèi)存緩沖區(qū)和一個(gè)游標(biāo)指針組成;其中緩沖區(qū)存放SQL語句的執(zhí)行結(jié)構(gòu);用戶可通過游標(biāo)指針獲取緩

49、沖區(qū)內(nèi)的每一條記錄。一般要先聲明游標(biāo),然后才能使用游標(biāo)。如果游標(biāo)聲明時(shí)已經(jīng)與SQL語句綁定,則稱為靜態(tài)游標(biāo),否則稱為動(dòng)態(tài)游標(biāo)。靜態(tài)游標(biāo)又分為隱式游標(biāo)和顯式游標(biāo)。ORACLE用游標(biāo)屬性反映最近一次被執(zhí)行的DML、DDL語句(INSERT, UPDATE, DELETE, SELECT INTO, COMMIT, ROLLBACK)的結(jié)果信息,它們是%FOUND(標(biāo)識(shí)DML操作是否改變了行記錄), %ISOPEN(標(biāo)識(shí)游標(biāo)是否打開),%NOTFOUND(標(biāo)識(shí)DML操作是否沒有改變行記錄), %ROWCOUNT(標(biāo)識(shí)DML語句影響的行數(shù))。顯式游標(biāo)用“游標(biāo)名%*”格式獲取游標(biāo)屬性,隱式游標(biāo)用“SQL

50、%*”格式獲取游標(biāo)屬性。顯式游標(biāo)僅用于查詢處理。使用顯式游標(biāo)需要經(jīng)過聲明、打開、推進(jìn)并獲取數(shù)據(jù)、關(guān)閉四個(gè)步驟。例1、分別處理兩個(gè)游標(biāo)DECLARE v_jobid employees.job_id%TYPE; - variable for job_id v_lastname employees.last_name%TYPE; - variable for last_name CURSOR c1 IS SELECT last_name, job_id FROM employees WHERE REGEXP_LIKE (job_id, SHT_CLERK); v_employees employe

51、es%ROWTYPE; - record variable for row CURSOR c2 is SELECT * FROM employees WHERE REGEXP_LIKE (job_id, ACADFIMKSA_MANGR);BEGIN OPEN c1; - open the cursor before fetching LOOP FETCH c1 INTO v_lastname, v_jobid; - fetches 2 columns into variables EXIT WHEN c1%NOTFOUND; DBMS_OUTPUT.PUT_LINE( RPAD(v_last

52、name, 25, ) | v_jobid ); END LOOP; CLOSE c1; DBMS_OUTPUT.PUT_LINE( ); OPEN c2; LOOP FETCH c2 INTO v_employees; - fetches entire row into the v_employees record EXIT WHEN c2%NOTFOUND; DBMS_OUTPUT.PUT_LINE( RPAD(v_employees.last_name, 25, ) | v_employees.job_id ); END LOOP; CLOSE c2;END;例2、從游標(biāo)中一次讀取數(shù)據(jù)D

53、ECLARE TYPE IdsTab IS TABLE OF employees.employee_id%TYPE; TYPE NameTab IS TABLE OF employees.last_name%TYPE; ids IdsTab; names NameTab; CURSOR c1 IS SELECT employee_id, last_name FROM employees WHERE job_id = ST_CLERK;BEGIN OPEN c1; FETCH c1 BULK COLLECT INTO ids, names; CLOsE c1;- Here is where yo

54、u process the elements in the collections FOR i IN ids.FIRST . ids.LAST LOOP IF ids(i) 140 THEN DBMS_OUTPUT.PUT_LINE( ids(i) ); END IF; END LOOP; FOR i IN names.FIRST . names.LAST LOOP IF names(i) LIKE %Ma% THEN DBMS_OUTPUT.PUT_LINE( names(i) ); END IF; END LOOP;例3、用FOR循環(huán)處理游標(biāo)DECLARE CURSOR c1 IS SEL

55、ECT last_name, job_id FROM employees WHERE job_id LIKE %CLERK% AND manager_id 120;BEGIN FOR item IN c1 LOOP DBMS_OUTPUT.PUT_LINE(Name = | item.last_name | , Job = | item.job_id); END LOOP;END;例4、動(dòng)態(tài)游標(biāo)DECLARE TYPE empcurtyp IS REF CURSOR RETURN employees%ROWTYPE; emp_cv empcurtyp; emp_rec employees%RO

56、WTYPE;BEGIN OPEN emp_cv FOR SELECT * FROM employees WHERE employee_id w3,v1=w1);-按照形參名稱傳入實(shí)參,沒有傳入的使用缺省值 dbms_output.put_line(w1=|w1| w3=|w3);END;SQLP*LUS調(diào)用SQLVAR w1 number;SQLVAR w3 number;SQLEXECUTE :w1 :=10;SQLEXECUTE testCall(:w1,250,:w3);用CALL testCall(:w1,250,:w3);也可SQLPRINT :w1;SQL PRINT :w3;SQ

57、LEXECUTE testCall(v1=:w1,v3=:w3);-不能用CALL testCall(v1=:w1,v3=:w3);PL/SQL中不能存儲(chǔ)函數(shù)不能直接調(diào)用函數(shù),函數(shù)必須出現(xiàn)在SQL表達(dá)式或PL/SQL表達(dá)式中例2、存儲(chǔ)函數(shù)調(diào)用CREATE OR REPLACE FUNCTION testFunc (v1 in out number, v2 in number:=100,v3 out number) RETURN numberAS Result number; BEGIN v1:=v2+v1; v3:=v2+55; Result:=v1+v2+v3; return(Result)

58、;END TESTFUNC;PL/SQL調(diào)用DECLARE w1 number:=10; w3 number; t1 number; t2 number;BEGIN t1:=testFunc(w1,250,w3);-依次傳入 dbms_output.put_line(w1=|w1| w3=|w3| t1=|t1); t2:=testFunc(v3=w3,v1=w1); dbms_output.put_line(w1=|w1| w3=|w3| t1=|t2);END;SQLP*LUS調(diào)用SQL var w1 number;SQL var w2 number;SQL var t1 number;S

59、QL var t2 number;SQL execute :w1:=10;SQL execute :t1:=testFunc(:w1,250,:w3);/函數(shù)調(diào)用SQL execute :t1:=testFunc(v1=:w1,v3=:w3);SQL call testFunc(v1=:w1,v3=:w3) into :t2;/調(diào)用出錯(cuò)SQL call testFunc(:w1,250,:w3) into :t2;、存儲(chǔ)子程序的調(diào)試(1)檢索用戶的子程序或觸發(fā)器SELECT object_name FROM user_objects WHERE object_type=PROCEDURE|FU

60、NCTION;(2)當(dāng)提交子程序時(shí),系統(tǒng)會(huì)對(duì)代碼進(jìn)行編譯,可用SHOW ERRORS查看出錯(cuò)信息。建議使用PL/SQL DEVELOPER調(diào)試。(3)查看子程序的代碼SQLCOLUMN LINE FORMAT 9999SQLCOLUMN TEST FORMAT A70SQLSELECT line,text FROM user_source WHERE name=子程序名;、刪除子程序SQLDROP PROCEDURE|FUNCTION 子程序名3.4、包包是一個(gè)獨(dú)立存儲(chǔ)的數(shù)據(jù)庫對(duì)象,由包規(guī)范和包體組成,用來分類組織和管理子程序和數(shù)據(jù)項(xiàng)。用戶可以使用包來組織自己的應(yīng)用,系統(tǒng)也以包的形式提供PL/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論