




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1數據庫原理(2015-2016)宋安平上海大學計算機學院1015室Apsong@第1周—第4周答疑時間:周三9-10,1001GGG2“數據庫原理”課程的特點:理論性:關系運算理論、模式設計理論等;實用性:數據庫語言、數據庫設計;可操作性:較強,有大量問題和應用值得分析和設計;
創新性:有許多深層的問題具有發展的余地,有待去挖掘、發現和總結。
3課程教學目的和要求:掌握數據庫系統的基本概念和原理;理解SQL、關系代數和關系演算等數據庫語言;學會關系數據庫規范設計的方法和步驟;了解數據庫系統的實現技術;具備使用關系數據庫軟件開發數據庫應用系統的能力。4《數據庫原理一》課堂教學+研討(30學時)內容及安排:第四章結構化查詢語言SQL(12學時)第一章數據庫發展史(3學時)第二章數據庫系統結構(3學時)第六章實體聯系模型(3學時)第三章關系運算(6學時)習題分析、總復習(3學時)5實驗內容和安排(20學時)
:見WORD附件寫實驗報告6第4章結構化查詢語言SQLSQL概述SQL的數據定義SQL的數據查詢SQL的數據更新視圖嵌入式SQL2023/2/57第一節SQL概述
SQL發展歷程SQL數據庫的體系結構SQL的組成8一、SQL發展歷程SQL(StructuredQueryLanguage)語言是1974年提出的在IBM公司的SystemR上實現。是介于關系代數和關系演算之間的語言。1986年ANSI批準SQL作為關系數據庫語言的美國標準,同年,ISO也同樣決定。以后相繼出現SQL89,SQL2(1992),SQL3(1999)。9二、SQL數據庫的體系結構SQL支持數據庫的三級模式結構,如圖4―1所示。從圖中可以看出,模式與基本表相對應,外模式與視圖相對應,內模式對應于存儲文件。基本表和視圖都是關系。1.基本表(BaseTable)基本表是模式的基本內容。每個基本表都是一個實際存在的關系。10圖4―1SQL支持的數據庫模式
11二、SQL數據庫的體系結構2.視圖(View)視圖是外模式的基本單位,用戶通過視圖使用數據庫中基于基本表的數據(基本表也可作為外模式使用)。視圖是虛表,實際并不存在,只有定義存放在數據字典中。12二、SQL數據庫的體系結構3.存儲文件存儲文件是內模式的基本單位。每一個存儲文件存儲一個或多個基本表的內容。一個基本表可有若干索引,索引也存儲在存儲文件中。存儲文件的存儲結構對用戶是透明的。下面將介紹SQL的基本語句。各廠商的RDBMS實際使用的SQL語言,與標準SQL語言都有所差異及擴充。因此,具體使用時,應參閱實際系統的有關手冊13三、SQL的組成數據定義DDL:CREATE、DROP、ALTER數據操縱DML:數據查詢DQL:SELECT數據操縱DML:INSERT、DELETE、UPDATE數據控制DCL:GRANT、REVOKE嵌入式SQL14第二節SQL的數據定義
SQL模式的創建和撤消SQL提供的基本數據類型基本表的創建、修改和撤消索引的創建和撤消15一、SQL模式的創建和撤消
SQL模式的創建CREATESCHEMA<模式名>AUTHORIZATION<用戶名>SQL模式的撤消DROPSCHEMA<模式名>[CASCADE|RESTRICT]16二、SQL提供的基本數據類型各具體DBMS所提供的數據類型是不同的。但下面的數據類型幾乎都是支持的:INT或INTEGER全字長二進制整數SMALLINT半字長二進制整數DEC(p[,q])或壓縮十進制數,共p位,其中小數點后有q位,FLOAT雙字長的浮點數CHAR(n)或CHARTER(n)長度為n的定長字符串VARCHAR(n)最大長度為n的變長字符串DATE日期型,格式為YYYY―MM―DDTIME時間型,格式為HH.MM.SS17三、基本表的創建、修改和撤消基本表的創建——CREATETABLECREATETABLE<表名>(<列名1><類型>[<該列的完整性約束>][,<列名2><類型>[<該列的完整性約束>]]…
[<,表級完整性約束>])<該列的完整性約束>:該列上數據必須符合的條件。最常見的有:NOTNULL該列值不能為空NULL該列值可以為空UNIQUE該列值不能有相同者DEFAULT該列上某值未定義時的默認值<表級完整性約束>:對整個表的一些約束條件,常見的有定義主碼(外碼),各列上數據必須符合的關聯條件等。18三、基本表的創建、修改和撤消例如:有一個學生數據庫中,有三個關系S(Sno,SName,Age,Sex,Sdept)C(Cno,CName,Tname)SC(Sno,Cno,Grade)19Createtables(snochar(4)notnull,snamechar(8),ageint,sexchar(2),primarykeysno);Createtablec(cnochar(4)notnull,cnamechar(10),tnamechar(8),primarykeycno);Createtablesc(snochar(4)notnull,cnochar(4)notnull,gradeint,primarykey(sno,cno),foreignkeysnoreferences(sno),foreignkeycnoreferencec(cno),check(gradebetween0and100));20三、基本表的創建、修改和撤消基本表結構的修改——ALTERTABLE基本表的結構是可以隨環境的變化而修改的,即根據需要增加、修改或刪除其中一列(或完整性約束條件等)。ALTERTABLE<表名>[ADD<列名><數據類型>[完整性約束]][DROP<列名>][MODIFY<列名><數據類型>[完整性約束]]21三、基本表的創建、修改和撤消基本表的撤消——DROPTABLEDROP
TABLE<表名>[CASCADE|RESTRICT]此語句一執行,指定的表即從數據庫中刪除(表被刪除,表在數據字典中的定義也被刪除),此表上建立的索引和視圖也被自動刪除(有些系統對建立在此表上的視圖的定義并不刪除,但也無法使用了)。22四、索引的創建和撤消索引的建立——CREATEINDEX在一個基本表上,可建立若干索引。有了索引,可以加快查詢速度。索引的建立和刪除工作由DBA或表的屬主(建表人)負責。用戶在查詢時并不能選擇索引,選擇索引的工作由DBMS自動進行。
CREATE[UNIQUE]INDEX<索引名>ON<表名>(<列名>[ASC|DESC])…
本語句為規定<表名>建立一索引,索引名為<索引名>。23四、索引的創建和撤消刪除索引——DROPINDEX索引太多,索引的維護開銷也將增大。因此,不必要的索引應及時刪除。DROPINDEX<索引名>本語句將刪除規定的索引。該索引在數據字典中的描述也將被刪除。24第三節SQL的數據查詢SELECT語句的基本格式舉例說明25一、SELECT語句的基本格式SELECT[DISTINCT]*|<目標列表達式[別名]清單>FROM<關系名[別名]或視圖名清單>
[WHERE<查詢條件表達式>][GROUPBY列名清單[HAVING<組條件表達式>]][ORDERBY列名[ASC|DESC],…]26整個語句的執行過程如下:1、讀取FROM子句中基本表、視圖的數據,執行笛卡爾積操作。2、選取滿足WHERE子句中給出的條件表達式的元組。3、按GROUP子句中指定列的值分組,同時提取滿足HAVING子句中組條件表達式的那些組。4、按SELECT子句中給出的列名或列表達式求值輸出。5、ORDER子句對輸出的目標表進行排序,按附加說明ASC升序排列,或按DESC降序排列。27SELECT語句中:
WHERE子句稱為“行條件子句”,
GROUP子句稱為“分組子句”,
HAVING子句稱為“組條件子句”,
ORDER子句稱為“排序子句”。28在WHERE子句的行條件表達式中可使用下列運算符:算術比較運算符:<,<=,>,>=,=,<>或!=;邏輯運算符:AND,OR,NOT;集合成員資格運算符:IN,NOTIN;謂詞:EXISTS,ALL,SOME,UNIQUE;聚合函數:AVG,MIN,MAX,SUM,COUNT;集合運算符:UNION,INTERSECT,EXCEPT。29二、舉例說明單表查詢--選擇列選擇表中的若干列
1.查詢指定列
例:查詢學生的學號和姓名
2.查詢全部列:使用*表示所有屬性
例:查詢全體學生的詳細情況
3.查詢經過計算的值:表達式可用別名代替
例:查詢學生的姓名和出生年份
注意:字段名稱AS別名
字段名稱別名
別名=字段名稱
4.消除取值重復的行 例查詢選課的學生學號30單表查詢—選擇行1.比較大小:比較運算符>>=<<==<>
例:查詢1980年以后出生的學生的基本情況2.確定范圍:列名[NOT]BETWEEN<下限>AND<上限>例:查詢年齡在20到25之間的學生姓名3.確定集合:列名[NOT]IN(<值序列>例:查詢選擇了c1、c4、c6課號的學生學號和成績4.涉及空值的查詢:列名IS[NOT]NULL例:列出所有成績為空的學生學號5.字符匹配:列名[NOT]LIKE‘<匹配串>’
通配符:%表示任意多個字符王%%衛%%衛
_表示任意一個字符_衛___千__平%王__ 例:查詢姓名中包含“敏”的學生姓名查詢所有劉姓、王姓且為雙名的學生姓名
31單表查詢—聚合函數1.COUNT([DISTINCT]*)統計元組的個數2.COUNT([DISTINCT]<列名>)統計一列中值的個數3.SUM([DISTINCT]<列名>)計算一列值的總和4.AVG([DISTINCT]<列名>)計算一列值的平均值5.MAX([DISTINCT]<列名>)求一列值中的最大值6.MIN([DISTINCT]<列名>)求一列值中的最小值例:查詢選過課的學生人數查詢選課次數查詢最大和最小年齡統計有多少名年齡超過19歲的女同學查詢學號s1的學生考試成績的平均分和總分32單表查詢—分組排序查詢結果分組查詢每類課的學生人數 查詢選課一門以上的學生學號 統計男女同學的人數和平均年齡查詢每門課程都超過70分的學生學號查詢結果排序查詢每門課的學生人數和總成績,查詢結果按總成績升序,人數降序排列統計每個學生選修課程的門數(超過5門的學生才統計)。要求輸出學生學號和選修門數,查詢結果按門數降序排列,若門數相同,按學號升序排列33
聯接操作
聯接條件可在WHERE中指定也可以在FROM子句中指定。
在FROM子句中指定聯接條件時,SQL2將
聯接操作符分成:
聯接類型、聯接條件。
聯接類型:決定了如何處理聯接條件中不匹配的元組。聯接條件:決定了兩個關系中哪些元組應該匹配。聯接類型中的OUTER字樣可不寫。34聯接類型聯接類型說明INNERJOIN內聯接:LEFTOUTERJOIN左外聯接:RIGHTOUTERJOIN右外聯接:FULLOUTERJOIN完全外聯接:CROSSJOIN交叉聯接:結果為兩個聯接表中的匹配行的聯接。
結果包括“左”表(出現在JOIN子句的最左邊)中的所有行。不包括右表中的不匹配行。
結果包括“右”表(出現在JOIN子句的最右邊)中的所有行。不包括左表中的不匹配行。結果包括所有聯接表中的所有行,不論它們是否匹配
結果包括兩個聯接表中所有可能的行組合。交叉聯接返回的是兩個表的笛卡兒積35多表連接查詢自身連接查詢選課二門或二門以上的學生學號檢索選修c1和c2課的學生學號,姓名復合條件連接查找選修了VB課程且成績在70分以上的姓名及成績。查詢每門課程都超過70分的學生學號、姓名。統計每個學生選修課程的門數(超過5門的學生才統計)。要求輸出學生學號、姓名和選修門數,查詢結果按門數降序排列,若門數相同,按學號升序排列。36相關子查詢帶有謂詞IN的子查詢例:查詢選修了課程號為c2的課程的學生姓名 查詢選修了數據庫原理課程的學生姓名帶有謂詞ANY和ALL的比較子查詢例:查詢平均成績超過所有女學生成績的男學生的學生學號和姓名帶有謂詞EXISTS的子查詢:返回子查詢是邏輯值例:查詢沒有選修c2課程的學生姓名 查詢所有學生都選修的課程號和課程名 求選修學號為S3的學生所修全部課程的學生號碼37第四節
SQL的數據更新數據插入數據刪除數據修改38一、數據插入
INSERTINTO<表名>[(<屬性名清單>)]VALUES(元組值);INSERTINTO<表名>(<屬性名清單>)
VALUES(元組值),(元組值),…
;INSERTINTO<表名>[(<屬性名清單>)]
(子查詢);把子查詢的結果插入指定的<表名>中。這樣的一條INSERT語句,可以一次插入多條元組。例:創建一個含有學號、姓名和課程名的新表,然后將男同學的相關數據插入到新表中39二、數據刪除
DELETEFROM<表名>
[WHERE<帶有子查詢的條件表達式>]本語句將刪除使<帶有子查詢的條件表達式>為真的所有元組。例:刪除沒選修任何一門課的學生信息把課程名為”數據庫原理”的成績從表SC中刪除40三、數據修改
UPDATE<表名>SET<列名>=<表達式>
[,<列名>=<表達式>……][WHERE<帶有子查詢的條件表達式>]本語句執行時,將修改使<帶有子查詢的條件表達式>為真的所有元組。例:對低于70分的增加5%,高于等于70分的增加4%把課程名為”數據庫原理”的成績提高10%41第五節
視圖視圖的定義視圖的查詢視圖的更新視圖的優點42一、視圖的定義
一個視圖是從一個或多個關系(基本表或已有的視圖)導出的關系。視圖是虛表,導出后,數據庫中只存有此視圖的定義(在數據字典中),但并沒有實際生成此關系。視圖一經定義就可以象基本表一樣進行查詢和更新。43一、視圖的定義
CREATEVIEW<視圖名>[<列名清單>]
AS<子查詢>
[WITHCHECKOPTION]若有<列名清單>,則此清單給出了此視圖的全部屬性的屬性名;否則,此視圖的所有屬性名即為子查詢中SELECT語句中的全部目標列。有[WITHCHECKOPTION]時,則今后對此視圖進行INSERT、UPDATE和DELETE操作時,系統會自動檢查視圖是否符合原定義視圖時子查詢中的<條件表達式>。44例:在教學數據庫中基本表SC上,建立一個學生學習情況視圖:
CREATEVIEWS_GRADE(SNO,C_NUM,AVG_GRADE) AS(SELECTSNO,COUNT(CNO),AVG(GRADE) FROMSC GROUPBYSNO);45一、視圖的定義
DROPVIEW<視圖名>此語句將把指定視圖的定義從數據字典中刪除。一個關系(基本表或視圖)被刪除后,所有由該關系導出的視圖并不自動刪除,它們仍在數據字典中,但已無法使用。例:撤消S_GRADE視圖,可用下列語句實現:
DROPVIEWS_GRADE;46二、視圖的查詢
DBMS對某SELECT語句進行處理時,若發現被查詢對象是視圖,則DBMS將進行下述操作:
(1)從數據字典中取出視圖的定義。
(2)把視圖定義的子查詢和本SELECT的查詢相結合,生成等價的對基本表的查詢(此過程稱為視圖的消解)。
(3)執行對基本表的查詢,把查詢結果(作為本次對視圖的查詢結果)向用戶顯示。47三、視圖的查詢系統在實現對視圖的查詢時,根據數據字典的定義將對視圖的查詢轉換為對基本表的查詢。例:對學生學習情況視圖執行如下操作:① SELECT*FROMS_GRADE;
相應的查詢轉換操作如下:
SELECTSNO,COUNT(CNO)ASC_NUM,AVG(GRADE)ASAVG_GRADEFROMSCGROUPBYSNO;48② SELECTSNO,C_NUM FROMS_GRADEWHEREAVG_GRADE>80;
相應的查詢轉換操作如下:SELECTSNO,COUNT(CNO)ASC_NUMFROMSCGROUPBYSNOHAVINGAVG(GRADE)>80;49③ SELECTSNO,AVG_GRADE FROMS_GRADEWHEREC_NUM>(SELECTC_NUMFROMS_GRADEWHERESNO=‘S4’);
相應的查詢轉換操作如下:SELECTSNO,AVG(GRADE)ASAVG_GRADEFROMSCGROUPBYSNOHAVINGCOUNT(CNO)>(SELECTCOUNT(CNO)FROMSCGROUPBYSNOHAVINGSNO=‘S4’);50三、視圖的更新
視圖是虛表,是沒有數據的。所謂視圖的更新,表面上是對視圖執行INSERT、UPDATE和DELETE來更新視圖的數據,其實質是由DBMS自動轉化成對導出視圖的基本表的更新,轉化成對基本表的INSERT、UPDATE和DELETE語句(用戶在感覺上確實是在對視圖更新)。不是所有的視圖都是可更新的,因為有些視圖的更新不能有意義的轉化成相應基本表的更新。51例:如果定義“計算機應用”學生視圖:
CREATEVIEWSTUDENT_COMPUTER(SNO,SNAME,SEX,AGE)ASSELECTSNO,SNAME,SEX,AGEFROMSWHERESDEPT=‘計算機應用’;
該視圖是從單個關系僅使用了選擇和投影導出的,而且包括鍵SNO,因此是可以修改的。如執行插入操作:
INSERTINTOSTUDENT_COMPUTERVALUES(‘S99’,‘王敏’,‘男’,22);系統自動會把它轉換變成下列語句:
INSERTINTOSVALUES(’S99’,‘王敏’,‘男’,22,‘計算機應用’);52
對于學生學習情況視圖:
CREATEVIEWS_GRADE(SNO,C_NUM,AVG_GRADE) ASSELECTSNO,COUNT(CNO),AVG(GRADE)
FROMSC
GROUPBYSNO;執行:UPDATES_GRADE SETSNO='S3' WHERESNO='S4';
不允許。C_NUM是對SC中的學生選修門數進行統計,在未更改SC表時,要在視圖S_GRADE中更改門數,是不可能的。53執行:DELETEFROMS_GRADEWHEREC_NUM>4;
也不允許的。在視圖S_GRADE中刪除選修門數在4門以上的學生元組,勢必造成SC中這些學生學習元組的刪除,這不一定是用戶的原意,因此使用分組和聚合操作的視圖,不允許用戶執行更新操作。54三、視圖的更新
一般的DBMS只允許對單個基本表導出的視圖進行更新。并有下列限制:①若視圖的列由表達式或常數組成,則不允許執行INSERT和UPDATE,但可執行DELETE。②若視圖的列由集函數組成,則不允許更新。③若視圖定義中有GROUPBY子句,則不允許更新。④若視圖定義中有DISTINCT選項,則不允許更新。⑤若視圖定義中有嵌套查詢,且內外層FROM子句中的表是同一個表,則不允許更新。⑥從不允許更新的視圖導出的視圖是不允許更新的。55四、視圖的優點1.視圖能方便用戶操作,若用戶所需數據來自多個基本表,則通過視圖可使用戶感到數據是來自一個關系的;若用戶所需數據是對基本表中的數據通過某種運算才能得到的,2.視圖可對數據提供安全保護3.視圖能使不同用戶都能用自己喜歡的方式看待同一數據同一數據,在不同用戶的各個視圖中,可以以不同的名稱出現,可以以不同的角色出現(平均值,最大值……)。這給數據共享帶來了很大的方便。56第六節
嵌入式SQLSQL語言的運行環境嵌入式SQL的使用規定嵌入式SQL的使用技術動態SQL語句57一、SQL語言的運行環境
常用的方式是用某種傳統的編程語言(例如:C、PASCAL等)編寫程序,但程序中的某些函數或某些語句是SQL語句。這種方式下使用的SQL語言稱為嵌入式SQL(EmbeddedSQL),其中傳統的編程語言稱為宿主語言(或主語言)。DBMS有兩種方法處理嵌入式SQL語言:預編譯和擴充編譯程序法。預編譯是指由DBMS的預編譯器對源程序進行掃描,識別出其中的SQL語句,把它們轉換為宿主語言調用語句,使宿主語言編譯器能夠識別,最后由編譯器將整個源程序編譯為目標碼。目前使用較多的是預編譯方法,其處理過程如圖4―2所示。58圖4―2嵌入式SQL語句的處理過程
59一、SQL語言的運行環境
使用嵌入式SQL必須解決以下幾個問題:(1)預編譯器不能識別和接受SQL語句,因此,嵌入式程序中,應有區分SQL語句與宿主語言語句的標記。(2)DBMS和宿主語言程序(程序工作單元)如何進行信息傳遞。(3)一條SQL語句原則上可產生或處理一組記錄,而宿主語言一次只能處理一個記錄,必須協調這兩種處理方式。60二、嵌入式SQL的使用規定
對嵌入的SQL語句加前綴EXECSQL,而結束標志則隨宿主語言的不同而不同。在C語言中嵌入的SQL語句以EXECSQL開始,以分號“;”結尾:EXECSQL<SQL語句>;在DBMS和宿主語言程序之間的數據傳遞,是通過宿主語言程序變量,簡稱主變量(Hostvariable)來實現的。當SQL語句引用主變量時,變量前應加冒號“:”。SQL語言和宿主語言的不同數據處理方式,是通過游標(Cursor)來協調的。游標是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標都有一個名字。61二、嵌入式SQL的使用規定
用戶可以用SQL語句逐一從游標中獲取記錄,并賦給主變量,由宿主語言作進一步的處理。游標的操作包括四個步驟:定義游標:EXECSQLDECLARE游標名CURSORFOR<SELECT語句>;打開游標:EXECSQLOPEN<游標名>;推進游標:EXECSQLFETCH<游標名>INTO<主變量名列表>;關閉游標:EXECSQLCLOSE<游標名>;62三、嵌入式SQL的使用技術
不涉及游標的嵌入式SQLDML語句涉及游標的嵌入式SQLDML語句滾動游標的定義和推進63三、嵌入式SQL的使用技術⑴在嵌入式SQL中,SQL的數據定義DDL與控制語句DCL都不需要使用游標。它們是嵌入式SQL中最簡單的一類語句,不需要返回結果數據,也不需要使用主變量。在主語言中嵌入SQL說明性語句(DECLARE)及控制語句(GRANT),只要給語句加上前綴EXECSQL和語句結束符END_EXEC即可。在C語言中,用分號;代替END_EXEC64例:在C語言中說明共享變量:EXECSQLBEGINDECLARESECTIONintgrade,raise;chargivencno[5],cname[13],tname[9];
chargivensno[5],sname[9],sdept[11];
charSQLSTATE[6];EXECSQLENDDECLARESECTION;65
⑵不涉及游標的嵌入式SQLDML語句
a.對于INSERT、DELETE和UPDATE語句,只要加上前綴標識“EXECSQL”和結束標志“END_EXEC”,就能嵌入在宿主語言程序中使用。例:①在關系C中插入一門新的課程,各屬性值已在相應的共享變量中:
EXECSQLINSERTINTOC(CNO,CNAME,TNAME)
VALUES(:givencno,:cname,:tname);66②從關系SC中刪除一個學生的所有選課,該學生的姓名由共享變量sname提供。
EXECSQLDELETEFROMSCWHERESNO=(SELECTSNOFROMSWHERESNAME=:sname);67③把“數據庫”課程的全部成績增加某個值(該值由共享變量raise提供)。
EXECSQLUPDATESCSETGRADE=GRADE+:raiseWHERECNOIN(SELECTCNOFROMCWHERECNAME=‘數據庫’);68b.對于SELECT語句,如果已知查詢結果肯定是單元組時,可直接嵌入在主程序中使用,此時在SELECI語句中增加一個INTO子句,指出找到的值應送到相應的共享變量中去。例:在關系S中根據共享變量givensno的值檢索學生的姓名和所在系。
69例:在關系S中根據共享變量givensno的值檢索該學生的姓名和所在系:
EXECSQLSELECTSNAME,SDEPTINTO:sname,:sdeptFROMSWHERESNO=:givensno;此處sname,sdept,givensno都是共享變量,已在主程序中定義,并用SQL的DECLARE語句加以說明,在引用是加上“:”作為前綴標識,以示與數據庫中變量區別。70
⑶涉及游標的嵌入式SQLDML語句
a、當SELECT語句查詢結果是多個元組時,此時要用游標機制把多個元組一次一個地傳送給宿主語言程序處理。例:在關系SC表中檢索某學生(學生名由共享變量givensname給出)選課信息(SNO,CNO,GRADE),
該查詢的C語言程序段:
71EXECSQLBEGINDECLARESECTION;Intgrade,rise;Charsno[5],cno[5],givensname[9],SQLSTATE[6];EXECSQLENDDECLARESECTION;EXECSQLDECLAREscxCURSORFORSELECTSNO,CNO,GRADEFROMSCWHERESNO=(SELECTSNOFROMSWHERESNAME=:givensname)FORUPDATEOFGRADE;EXECSQLOPENscx;
72While(1){EXECSQLFETCHFROMscxINTO:sno,:cno,:grade;If(SQLCA.SQLSTATE=='02000’)/﹡已取完查詢結果中的所有元組﹡/Break;If(SQLCA.SQLSTATE!=’0’)/﹡取數據出錯﹡/Break;
…/﹡對游標所取的數據進行處理﹡/printf(“%s,%s,%d”,sno,cno,grade);}EXECSQLCLOSEscx;73b.對游標指向的元組進行修改或刪除操作
當游標處于活動狀態時,可以修改或刪除游標指向的元組。例:在上面的例子中,對找到的元組做如下處理:刪除不及格的選課,將6069分的成績增加由共享變量rise提供的值,再顯示該學生的成績信息(SNO,CNO,GRADE).
在上例中的”While(1){…}語句改為如下形式:74While(1){EXECSQLFECCHFROMscxINTO:sno,:cno,:grade;If(SQLCA.SQLSTATE=='02000’)/﹡已經取完查詢結果中的所有元組﹡/Break;If(SQLCA.SQLSTATE!=’0’)/﹡取數據出錯﹡/Break;If(grade<60)EXECSQLDELETEFROMSCWHERECURRENTOFscx;Else{If(grade<70)
75{EXECSQLUPDATECSETGRADE=GRADE+:riseWHERECURRENTOFscx;grade=grade+rise;}printf(“%s,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校燒鍋爐勞務合同
- 共享單車投放與運營維護合同
- 音響設備租賃合同
- 借款分期付款合同
- 廢輪胎購銷合同范本
- 綠網覆蓋合同范本
- 2025年直播違約合同模板
- (7)-小學文言文閱讀詳解50篇
- 租房返利合同范本
- 路邊車位維修合同范本
- 2025年教師資格師德師風建設試題及答案
- 期中測試卷(1-5單元)(試題)(含答案)-2024-2025學年二年級下冊數學青島版
- 2025屆北京市順義區高三下學期一模英語試題(原卷版+解析版)
- 人工智能技術與知識產權保護
- 2025-2030便利店行業市場發展現狀及發展前景與投資研究報告
- 2025屆高三湖北省十一校第二次聯考英語試卷(含答案詳解)
- 信息技術與小學教育教學融合
- 產品設計研發費用統計表
- 提高教學管理質量校長講話:“2574”工作實施思路!即兩大抓手五項重點任務七個落實環節四個質量目標
- 2025屆廣東省深圳市高三年級第一次調研考試歷史試題
- 清理報廢漁船合同范本
評論
0/150
提交評論