數(shù)據(jù)庫系統(tǒng)-第8章概論_第1頁
數(shù)據(jù)庫系統(tǒng)-第8章概論_第2頁
數(shù)據(jù)庫系統(tǒng)-第8章概論_第3頁
數(shù)據(jù)庫系統(tǒng)-第8章概論_第4頁
數(shù)據(jù)庫系統(tǒng)-第8章概論_第5頁
已閱讀5頁,還剩134頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫系A(chǔ)nIntroductiontoDatabase第八章數(shù)據(jù)庫編大學(xué)信第八章嵌入式過ODBC編8.18.1嵌入式嵌入式SQL嵌入式SQL不使用游標(biāo)的SQL使用游標(biāo)的SQL動(dòng)態(tài)小8.1.18.1.1嵌入式SQL嵌入式SQL嵌入式SQL的處理過程(續(xù)嵌入式SQL嵌入式SQL的處理過程(續(xù)必須加前綴EXECSQL,以(;)結(jié)束:EXECSQLSQL語句嵌入式SQL嵌入式SQL不使用游標(biāo)的SQL使用游標(biāo)的SQL動(dòng)態(tài)小8.1.2嵌入式SQL語句與主語言之間的 嵌入式SQL嵌入式SQL語句與主語言之間的通信(續(xù)1SQL23SQLCA:SQLCommunication描述系統(tǒng)當(dāng)前工作描述運(yùn)行SQLSQLSQLCA中有一個(gè)存放每次執(zhí)行SQL量如果SQLCODE等于預(yù)定義的常量SUCCESSSQL語句成功,否則表QL(Host主變量(續(xù)主變量(續(xù)主變量(續(xù)主變量(續(xù)主變量(續(xù)主變量(續(xù)1BEGINDECLARE (說明主變量和指示變量ENDDECLARE主變量(續(xù)主變量(續(xù)23)使用指示變主變量(續(xù) 三、游標(biāo)三、游標(biāo)為什么要使用SQL語言與主語言具有不同主語言是面向記錄嵌入式SQL式游標(biāo)(續(xù)游標(biāo)(續(xù)四、建立和關(guān)閉數(shù)據(jù)庫EXECSQLCONNECT [ASconnection-name][USERuser-是要連接的數(shù)常見的服務(wù)器標(biāo)識(shí)串,如包含服務(wù)器標(biāo)識(shí)的SQLconnect-name是可選的在整個(gè)程序內(nèi)只 接時(shí)可以不指定連接EXECSQLDISCONNECT程序運(yùn)行過程中可以修改當(dāng)前連接EXECSQLSETCONNECTIONconnection-name|五、程序 EXECSQLBEGINDECLARESECTION;/*主變量說明開始charHSno[64];charHSname[64];charHSsex[64]; EXECSQLENDDECLARE /*主變量說明結(jié)束longEXECSQLINCLUDE /*定義SQL通信區(qū)程序?qū)嵗ɡm(xù)程序?qū)嵗ɡm(xù)int{

/*C語言主程序開始 count=charyn; printf("Pleasechoosethedepartmentname(CS/MA/IS):");scanf("%s",deptname); EXECSQLCONNECTTOTEST@localhost:54321USER"SYSTEM" /*連接數(shù)據(jù)庫EXECSQLDECLARESXCURSOR /*定義游標(biāo)SELECTSno,Sname,Ssex,FROMWHERESDept=

/*SX對(duì)應(yīng)語句的執(zhí)行結(jié)果EXECSQLOPEN /*打開游標(biāo)SX便指向查詢結(jié)果的第一行程序?qū)嵗ɡm(xù)for {EXECSQLFETCHSXINTO:HSno,:HSname,if(sqlca.sqlcode!=0)if(count++==

/*sqlcode0,表示操作不成功/*利用SQLCA中的狀態(tài)信息決定何時(shí)退出循環(huán)printf("\n%-10s%-20s%-10s%-10s\n","Sno","Sname","Ssex",printf("%-10s%-20s%-10s%-10d\n",HSno,HSname,HSsex, }while(yn!='N'&&yn!='n'&&yn!='Y'&&yn!=程序?qū)嵗ɡm(xù)ifyny||yn /*如果選擇更新操作{printf("INPUTNEWEXECSQLUPDATEStudent

/*用戶輸入 到主變量中/*嵌入式SETSage=WHERECURRENTOFSX /*對(duì)當(dāng)前游標(biāo)指向的學(xué) 進(jìn)行更新}EXECSQLCLOSESX;EXECSQLCOMMITWORK;

/*關(guān)閉游標(biāo)SX不再和查詢結(jié)果對(duì)應(yīng)/*提交更新EXECSQLDISCONNECT /*斷開數(shù)據(jù)庫連接}嵌入式SQL嵌入式SQL不使用游標(biāo)的SQL使用游標(biāo)的SQL動(dòng)態(tài)小8.1.38.1.3不用游標(biāo)的SQL查詢結(jié)果為單記錄的SELECT語非CURRENT形式的增刪改語不用游標(biāo)的SQL不用游標(biāo)的SQL語句(續(xù)EXECSQLSELECTSno,Sname,Ssex,Sage,SdeptINTO:Hsno,:Hname,:Hsex,:Hage,:HdeptFROMStudentWHERE查詢結(jié)果為單記錄的SELECT查詢結(jié)果為單記錄的SELECT語句(續(xù)查詢結(jié)果為單記錄的SELECT查詢結(jié)果為單記錄的SELECT語句(續(xù)[例3]查詢某個(gè)學(xué)生選修某門課程的成績。假設(shè)已經(jīng)把將要查 EXECSQLSELECTINTO FROMWHERESno=:givensno 如果Gradeid<0,不論Hgrade為何值,均認(rèn)為該學(xué)生成績?yōu)榭誟例4修改某個(gè)學(xué)生選修1EXECSQLUPDATESET /*修改的成績已賦給主變量非CURRENT形式的增刪改語句(續(xù)[例5]將計(jì)算機(jī)系全體學(xué) EXECSQLUPDATESETSage=:RaiseWHERESdept= EXECSQLUPDATESETWHERESdept=非CURRENT形式的增刪改語句(續(xù)]掉。假設(shè)該學(xué)生 EXECSQLFROMWHERE(SELECTFROMWHERE非CURRENT形式的增刪改語句(續(xù)[例7]某個(gè)學(xué)生新選修了某門課程,將有關(guān)記錄 EXECSQLINSERT

INTOVALUES(:stdno,:couno,:gr8.1.2嵌入式SQL8.1.5動(dòng)態(tài)8.1.68.1.48.1.4使用游標(biāo)的SQL查詢結(jié)果為多條記錄的SELECT語CURRENT形式的UPDATE語CURRENT形式的DELETE語使用游標(biāo)的SQL使用游標(biāo)的SQL語句(續(xù)SELECTSELECTEXECSQLDECLARE游標(biāo)名CURSORFOR<SELECT語句>;EXECSQLFETCHFIRST|LASTFROM游標(biāo)名INTO主變量>[<指示變量>][,<主變量>[<指示變量推進(jìn)游標(biāo)指針并取當(dāng)前記錄(續(xù)推進(jìn)游標(biāo)指針并取當(dāng)前記錄(續(xù)NEXT:向前推進(jìn)一條記PRIOR:向回退一條記FIRST:推向第一條記LAST缺省值為44EXECSQLCLOSE游標(biāo)名二、CURRENT二、CURRENT形式的UPDATE語句和DELETECURRENT形式的CURRENT形式的UPDATE語句和DELETE語句(續(xù)WHERECURRENTOF游標(biāo)名CURRENT形式的CURRENT形式的UPDATE語句和DELETE語句(續(xù)8.1.2嵌入式SQL8.1.5動(dòng)態(tài)8.1.68.1.5動(dòng)態(tài)靜態(tài)嵌入式動(dòng)態(tài)嵌入式動(dòng)態(tài)SQL動(dòng)態(tài)SQL簡(jiǎn)介(續(xù)一、使用SQL一、使用SQL使用SQL使用SQL語句主變量(續(xù)[例9]創(chuàng)建基本表EXECSQLBEGINDECLAREconstchar*stmt="CREATETABLEtest(aEXECSQLENDDECLARE...EXECSQLEXECUTEIMMEDIATE使用參數(shù)符號(hào)(?)表示該位置的數(shù)據(jù)在運(yùn)行時(shí)設(shè)動(dòng)態(tài)參數(shù)(續(xù)主變量動(dòng)態(tài)參數(shù)(續(xù)動(dòng)態(tài)參數(shù)(續(xù)使用動(dòng)態(tài)參數(shù)的步驟(續(xù)執(zhí)行準(zhǔn)備好的語句EXECSQLEXECUTE語句名[INTO主變量表[USING 動(dòng)態(tài)參數(shù)(續(xù) EXECSQLBEGINDECLAREconstchar*stmt="INSERTINTOtest EXECSQLENDDECLARE...EXECSQLPREPAREmystmtFROM ...EXECSQLEXECUTEmystmtUSING100*EXECSQLEXECUTEmystmtUSING200*嵌入式SQL嵌入式SQL不使用游標(biāo)的SQL使用游標(biāo)的SQL動(dòng)態(tài)小8.1.68.1.6直接與數(shù)據(jù)庫打交道,取出數(shù)據(jù)庫中的數(shù)控制程序?qū)θ〕龅臄?shù)據(jù)做進(jìn)一步加工小結(jié)(續(xù)小結(jié)(續(xù)第八章嵌入式過ODBC編 過SQL-invoked過程(SQL-invoked函數(shù)(SQL-invoked 過PL/SQL變量常量的控制結(jié)過小8.2.18.2.1PL/SQLPL/SQLPL/SQL的塊結(jié)構(gòu)(續(xù)PL/SQL的塊結(jié)構(gòu)(續(xù)PL/SOL定義 PL/SQL的塊結(jié)構(gòu)(續(xù)PL/SQL的塊結(jié)構(gòu)(續(xù)PL/SOL塊的基本結(jié)構(gòu)(續(xù)執(zhí)行 過PL/SQL變量常量的控制結(jié)過小8.2.28.2.2PL/SQL中定義變量的語法形式是常量的定義類似于變量的定義賦值語 過PL/SQL變量常量的控制結(jié)過小8.2.38.2.3PL/SQL功能:控制結(jié)構(gòu)(續(xù)控制結(jié)構(gòu)(續(xù)IF-THENIF-THEN-ELSE和嵌套的IFIFconditionENDIFIFconditionEND控制結(jié)構(gòu)(續(xù)控制結(jié)構(gòu)(續(xù)二、循環(huán)控制LOOP,WHILE-LOOP和FOR-最簡(jiǎn)單的循環(huán)語句END多數(shù)數(shù)據(jù)庫服務(wù)器的PL/SQL都提供EXIT、BREAKLEAVE等循環(huán)結(jié)束語句,保證LOOP語句塊能夠結(jié)控制結(jié)構(gòu)(續(xù)控制結(jié)構(gòu)(續(xù)二、循環(huán)控制語句(續(xù)WHILEconditionEND每次執(zhí)行循環(huán)體語句如果條件為真如果條件為FORcountIN[REVERSE]bound1…bound2ENDLOOP;控制結(jié)構(gòu)(續(xù)控制結(jié)構(gòu)(續(xù)三、錯(cuò)誤處了建議,要求PL/SQL管理器提供完善的異常處理機(jī) 過8.2.1PL/SQL8.2.2變量常量的8.2.3控制結(jié) 過8.2.5過 數(shù)據(jù)庫中,也不能在其他的PL/SQL塊中調(diào)過程(續(xù) 過程(續(xù) 一 過程的優(yōu)點(diǎn)過程(續(xù) 二 1.創(chuàng) 過程<PL/SQL塊 過程的用戶接口(續(xù)[例11]利用 CREATEPROCEDURETRANSFER(inAccountINT,INT,amountAStotalDeposit /*檢查轉(zhuǎn)出賬戶的余SELECTtotalINTOFROMACCOUNTWHEREIFtotalDepositISNULLEND

過程的用戶接口(續(xù)IFtotalDeposit<amountEND

/*賬戶賬戶存款不UPDATEaccountSETtotal=total-amountWHEREACCOUNTNUM=outAccount;UPDATEaccountSETtotal=total+amountWHERE/*修改轉(zhuǎn)入賬戶,增加轉(zhuǎn)出額 /*提交轉(zhuǎn)賬事過程的用戶接口(續(xù) ALTERProcedure過程名1RENAMETO過程名過程的用戶接口(續(xù)2.執(zhí) 過程CALL/PERFORMProcedure過程名([參數(shù)1,參數(shù) [例]從賬 CALLProcedure過程的用戶接口(續(xù) DROPPROCEDURE過程名三、游三、游一個(gè)游標(biāo)與一個(gè)SQLPL/SQL中的游標(biāo)由PL/SQL引擎管 過8.2.1PL/SQL8.2.2變量常量的8.2.3控制結(jié) 過8.2.5經(jīng)編譯和優(yōu)化 第八章嵌入式過ODBC編8.3ODBC能同 不同的數(shù)據(jù)8.38.3ODBC8.3.1數(shù)據(jù)庫互連8.3.2ODBC工作原理8.3.3ODBCAPI8.3.4ODBC的工作8.3.58.3.1數(shù)據(jù)庫互連ODBC產(chǎn)生的原因 同的數(shù)據(jù)庫互連概述(續(xù)是微軟公司開放服務(wù)體系(WindowsOpen提供了一 數(shù)據(jù)庫的標(biāo)準(zhǔn)ODBC約束力規(guī)范RDBMS應(yīng)用接8.38.3ODBC8.3.1數(shù)據(jù)庫互連8.3.2ODBC工作原理8.3.3ODBCAPI8.3.4ODBC的工作8.3.58.3.28.3.2ODBC二、、ODBC數(shù)據(jù)源管一、ODBC應(yīng)用程序包括的內(nèi)容 二、驅(qū)動(dòng)程序管包含在ODBC32.DLL管理應(yīng)用程序和驅(qū)動(dòng)建立、配置或刪除數(shù)據(jù)源并查看系統(tǒng)當(dāng)前所安裝的數(shù)據(jù)庫驅(qū)動(dòng)程主要功能裝載ODBC驅(qū)動(dòng)程選擇和連接正確的驅(qū)管理數(shù)檢查ODBC記錄ODBC函數(shù)的調(diào)用三、數(shù)據(jù)庫驅(qū)動(dòng)ODBC應(yīng)用程序不能直接存取數(shù)據(jù) 數(shù)據(jù)庫驅(qū)動(dòng)程序(續(xù)數(shù)據(jù)源和應(yīng)用程序在驅(qū)動(dòng)程序直接完成對(duì)數(shù)據(jù)文件的I/O操驅(qū)動(dòng)程序相當(dāng)于數(shù)據(jù)由驅(qū)動(dòng)程序完成數(shù)據(jù) 請(qǐng)求的提交和結(jié)果集接應(yīng)用程序使用驅(qū)動(dòng)程序提供的結(jié)果集管理接 執(zhí)行后的四、ODBC數(shù)據(jù)源管 ODBC給每個(gè) 的數(shù)據(jù)源指定唯一的數(shù)據(jù)源名(DataName,簡(jiǎn)稱DSN), 到所有必要的、用來存取數(shù)據(jù)的低層軟等MODBC數(shù)據(jù)源管理(續(xù)例如,假設(shè)某個(gè)學(xué)校在MSSQLServer和KingbaseES 當(dāng) 8.38.3ODBC8.3.1數(shù)據(jù)庫互連8.3.2ODBC工作原理8.3.3ODBCAPI8.3.4ODBC的工作8.3.58.3.3ODBCAPI 一、一、ODBC3.0標(biāo)準(zhǔn)提供了76編目函數(shù),ODBC3.0提供了11個(gè)編目函數(shù)如SQLTables、函數(shù)概述(續(xù)函數(shù)概述(續(xù)ODBC1.0和ODBC2.x、ODBC3.x函數(shù)使用上有MFCODBC對(duì)較復(fù)雜的ODBCAPI進(jìn)行了封裝,二、二、ODBC3.0句柄及其屬性(續(xù)句柄及其屬性(續(xù) 句柄及其屬性(續(xù)狀態(tài)、當(dāng)前在環(huán)境上分配的連接句柄等;一個(gè)環(huán)境句柄可以建立多個(gè)連接句柄,每接句柄實(shí)句柄及其屬性(續(xù) 在ODBC3.0中又提出了描述符句柄三、三、數(shù)據(jù)類型(續(xù)數(shù)據(jù)類型(續(xù)數(shù)據(jù)類C數(shù)據(jù)SQL數(shù)據(jù)數(shù)據(jù)源之間轉(zhuǎn)應(yīng)用程序變量傳送到語參數(shù)C數(shù)據(jù)類從結(jié)果集列中返回到應(yīng)程序變量應(yīng)用程序變量之間8.38.3ODBC8.3.1數(shù)據(jù)庫互連8.3.2ODBC工作原理8.3.3ODBCAPI8.3.4ODBC的工作8.3.58.3.4ODBC的工作:ODBC的工作流:ODBC的工作流程(續(xù)ODBC的工作流程(續(xù)份到SQLSERVER數(shù)據(jù)庫中。該應(yīng)用涉及兩個(gè)不同的RDBMS中的數(shù)據(jù)ODBCODBC的工作流程(續(xù)中分別建立了STUDENT關(guān)系CREATETABLE( CHAR(9)PRIMARYSnameCHAR(20)

SdeptODBC的工作流程(續(xù)在KingbaseES上執(zhí)行SELECT*FROMINSERTINTOSTUDENT到SQLSERVER的STUDENT表ODBC的工作流程(續(xù)ODBC的工作流程(續(xù)三、建立連接六、結(jié)果集處理七、中止處理一、 將其取名為KingbaseESODBC和SQLServer。配置數(shù)據(jù)源(續(xù)配置數(shù)據(jù)源(續(xù)#include<stdlib.h>#include<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<Sqltypes.h>#defineSNO_LEN30#defineNAME_LEN#defineDEPART_LEN#defineSSEX_LEN配置數(shù)據(jù)源(續(xù)配置數(shù)據(jù)源(續(xù)int{/*Step1

kinghenv,

sSex[SSEX_LEN],sSno[SNO_LEN]; SQLINTEGERcbAge=0,cbSno=SQL_NTS,沒有和具體的驅(qū)動(dòng)程序相關(guān)聯(lián),由DriverManager來進(jìn)行控制,并配置環(huán)境屬性DriverManager才調(diào)用所連的驅(qū)動(dòng)程序中的[例13]創(chuàng)建數(shù)據(jù)源---第二步:初始化/*Step2初始化環(huán)*/SQL_NULL_HANDLE,&kinghenv);SQL_NULL_HANDLE,&serverhenv);(void*)SQL_OV_ODBC3,(void*)SQL_OV_ODBC3,三、SQLConnect用戶[例13]中KingbaseESODBC為數(shù)據(jù)源名字,SYSTEM為/*Step3建立ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,ret=SQLConnect(kinghdbc,"KingbaseES"SYSTEM",SQL_NTS,ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,if(!SQL_SUCCEEDED(ret) //連接失敗時(shí)返回錯(cuò)四、分配語句 ,kinghdbc,&kinghstmt);SQL_BIND_BY_COLUMN,SQL_IS_INTEGERret=SQLAllocHandle(SQL_HANDLE_STMT,五、五、執(zhí)行SQLSQLBindParameter執(zhí)行SQL語句(續(xù)有結(jié)果集的語句(select或是編目函數(shù))沒有結(jié)

溫馨提示

  • 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)論