版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Oracle Pro*C 編程1引編寫(xiě)目編寫(xiě)背參考資Oracle Pro*C 編程1引編寫(xiě)目編寫(xiě)背參考資23Pro*C簡(jiǎn)例編譯過(guò)Pro*C頭文件和庫(kù)文Oracle預(yù)編譯選項(xiàng)配置文件4Pro*C語(yǔ)法結(jié)嵌入SQL語(yǔ)句在程序中的標(biāo)志換程序結(jié)嵌入PL/SQL大小嵌入的SQL語(yǔ)句分宿主變偽數(shù)據(jù)類(lèi)注換WHENEVER語(yǔ)句5動(dòng)態(tài)Oracle方動(dòng)態(tài)SQL語(yǔ)句的處理過(guò)Oracle使用動(dòng)態(tài)SQL的四種方ANSI方使用ANSI方法的一些注意事ANSI方法和Oracle方法的不ANSI處理方法對(duì)動(dòng)態(tài)SQL語(yǔ)句的處理步程序舉第 2 20 Oracle Pro*C 編程1引 的Informix, 現(xiàn)擬向Oracle2Pr
2、o*C在ORACLE 數(shù)據(jù)庫(kù), 這些工具有Oracle Pro*C 編程1引 的Informix, 現(xiàn)擬向Oracle2Pro*C在ORACLE 數(shù)據(jù)庫(kù), 這些工具有等利用在第三代語(yǔ)言?xún)?nèi)嵌入的 SQL 語(yǔ)言或 ORACLE 庫(kù)函數(shù)調(diào)用來(lái)Pro*C就屬于第三種開(kāi)發(fā)工具之一,它把過(guò)程化語(yǔ)言C和非過(guò)程化語(yǔ)言SQL最完入、修改和刪除數(shù)據(jù)庫(kù)表中的行, 還可以實(shí)現(xiàn)事務(wù)的提交和回滾。第 3 20 序名作發(fā)布日期1Oracle數(shù)據(jù)庫(kù)高級(jí)應(yīng)用2 3Oracle 培Oracle Pro*C 編程3預(yù)編譯與編譯3.1 3.2 $procle1.pc$ccc.o$ccOracle Pro*C 編程3預(yù)編譯與編譯3.1
3、 3.2 $procle1.pc$ccc.o$ccL$ORACLE_HOME/liblclntshole1$第 4 20 允許自動(dòng)ops$ 帳SQL2OCI。Oracle Pro*C 編程第 5 20 正關(guān)閉所COMMIT 游C 編譯器支持的字符集類(lèi)C+ 文件名后Oracle Pro*C 編程第 5 20 正關(guān)閉所COMMIT 游C 編譯器支持的字符集類(lèi)C+ 文件名后#defineSQLCODEsqlca.sqlcode 設(shè)置高速緩存中pin 持續(xù)Oracle ANSI 動(dòng)態(tài)SQL 語(yǔ)ANSI FIPS 標(biāo)志不符合用#line 指令添加到生成的代碼代碼符Oracle ANSI 規(guī)控制NLS 字
4、符語(yǔ)義的實(shí)現(xiàn)方控制ORACA 的使控制進(jìn)行語(yǔ)法分SQL 代游標(biāo)OPEN 期間編譯時(shí)SQL 校驗(yàn)總Oracle ANSI 類(lèi)型代碼用于動(dòng)態(tài)允許在沒(méi)有指示變量的情況下進(jìn)行Oracle Pro*C 編程4Pro*C4.2 4.3 Oracle Pro*C 編程4Pro*C4.2 4.3 ORACLE庫(kù)做好了準(zhǔn)備。應(yīng)用程序體基本上由 Pro*C 的 SQL:描述部應(yīng)用程序首SQL 通信應(yīng)用程序4.4InformixOraclePro*C 的連接過(guò)程:f(Nowwewillconnect toOraclef(nPleaseinputyour 第 6 20 EXECSQLBEGINDECLAREEXECS
5、QLENDDECLAREEXECSQLINCLUDEEXECSQLCONNECT:IDENTIFIEDBY:SQL用戶(hù)名/dbname 連接允許使用隱式varchar 結(jié)Oracle Pro*C 編程f(nPleaseinputyourEXECSQLWHENEVER OTOEXECSQLCONNECT:usernameIDENTIFIEDBYf(ConnectreturnOracle Pro*C 編程f(nPleaseinputyourEXECSQLWHENEVER OTOEXECSQLCONNECT:usernameIDENTIFIEDBYf(Connectreturnreturn -4.5
6、 PL/SQLEXECSQLEXECUTEEND-EXEC4.6 4.7 嵌入的SQL第 7 20 BEGINDECLAREENDDECLAREOracle Pro*C 編程按照 ANSI 標(biāo)準(zhǔn), 只有在 Pro*C 預(yù)編譯程序的宿主變區(qū)的變量SECTION才能做為宿主變Oracle Pro*C 編程按照 ANSI 標(biāo)準(zhǔn), 只有在 Pro*C 預(yù)編譯程序的宿主變區(qū)的變量SECTION才能做為宿主變量。區(qū)域?yàn)?EXECSQLEXECSQLENDDECLARESECTIONb. OracleOracleANSI的SQLPL/SQL區(qū)別于 Oracle 數(shù)據(jù)庫(kù)對(duì)象名稱(chēng)。 但在 C 語(yǔ)句在使用這些變量
7、時(shí), 則不能加, 4.9p/admin第 8 20 CONNECT,CLOSE,ALLOCATE,FREE, CREATE, ALTER, DROP, GRANT, REVOKE, AUDIT, NOAUDIT, CONTEXT, ENABLE THREADS, RENAME, YZE,INSERT,UPDATE,DELETE,SELECT, COMMIT, ROLLBACK, SAVEPODESCRIBE,EXECUTE,ALTER,SETOracle Pro*C 編程4.10 4.11 :Oracle Pro*C 編程4.10 4.11 :在4.12 換行4.13 4.14 OracleO
8、racle 使用兩種游標(biāo): 顯式游標(biāo)和隱式游標(biāo). 不管語(yǔ)句返回多少條,Oracle為每條使用的SQL 語(yǔ)句隱式地定義一個(gè)游標(biāo). Oracle 為每個(gè)DELETE , INSERT 等SQL游標(biāo). 并使用顯式游標(biāo)處理SELECT . CURSOR(3)FETCH(4)CLOSE A. EXECSQLDECLARE 游標(biāo)名CORSORSELECT 列 FROM 表 EXECSQLDECLARECSOR,CURSORFOR SELECT ENAME , JOB, SALFROM數(shù)據(jù)庫(kù)中返回多行,這些行就是 CURSOR 的一個(gè)活動(dòng)區(qū)域。第 9 20 Oracle Pro*C 編程B. 在定義游標(biāo)之后
9、應(yīng)用程序在使用游標(biāo)變量之前, ALLOCATE語(yǔ)句申請(qǐng)游標(biāo), 也就是為游標(biāo)變量分配內(nèi)存區(qū)域, ALLOCATE Oracle Pro*C 編程B. 在定義游標(biāo)之后應(yīng)用程序在使用游標(biāo)變量之前, ALLOCATE語(yǔ)句申請(qǐng)游標(biāo), 也就是為游標(biāo)變量分配內(nèi)存區(qū)域, ALLOCATE 語(yǔ)法格式為:C. 的主變量。打開(kāi)游標(biāo)的語(yǔ)句是:EXEC SQL OPEN 游標(biāo)名:D. EXECSQLFETCH游標(biāo)名:第 10 20 Oracle Pro*C 編程FETCH語(yǔ)句每執(zhí)行一次,從當(dāng)前行或當(dāng)前組取數(shù)據(jù)一次,下一行或下一FETCHSQLCA(Oracle Pro*C 編程FETCH語(yǔ)句每執(zhí)行一次,從當(dāng)前行或當(dāng)前組
10、取數(shù)據(jù)一次,下一行或下一FETCHSQLCA(=1403若希望此游標(biāo)再操作, 必須先關(guān)閉再打開(kāi)它。 EXECSQLCLOSE EXECSQLCLOSE CLOSE 語(yǔ)句在關(guān)閉游標(biāo)變量時(shí), 游標(biāo)變量所點(diǎn)用的內(nèi)存. 所以, 量關(guān)閉之后應(yīng)用程序可以重新打開(kāi)游標(biāo)變量, 實(shí)現(xiàn)各種游標(biāo)操作. 經(jīng)所點(diǎn)用的內(nèi)存. 方法如下EXECSQLFREE4.15 WHENEVER第 11 20 Oracle Pro*C 編程SQLWHENEVER 語(yǔ)句的語(yǔ)法格式為:EXECSQLWHENEVEREXECSQLWHENEVERSQLERRORDOOracle Pro*C 編程SQLWHENEVER 語(yǔ)句的語(yǔ)法格式為:EX
11、ECSQLWHENEVEREXECSQLWHENEVERSQLERRORDONOT FOUND和 CONTINUE 和區(qū)別).4.16 Pro*CCOMMIT,ROLLBACK,和SET與 SQL 語(yǔ)句相SQLCOMMIT 和ROLLBACKRELEASE OracleRELEASECOMMIT5 構(gòu)造出來(lái)(也就是說(shuō)動(dòng)態(tài) SQL 語(yǔ)句在程序編譯時(shí)語(yǔ)句的選擇列表和確定, 變量數(shù)據(jù)大于0)。 這種在程序執(zhí)行臨時(shí)生SQLSQL 語(yǔ)句. 利用動(dòng)SQL編寫(xiě) Pro*C 程序的方法叫動(dòng)態(tài) SQL 技術(shù).SQL 語(yǔ)句的文本.第 12 20 Oracle Pro*C 編程下面先說(shuō) Oracle 自己的方法.5
12、.1 OracleOracle Pro*C 編程下面先說(shuō) Oracle 自己的方法.5.1 Oracle動(dòng)態(tài) SQL 語(yǔ)句的處理過(guò)程為 SQL 語(yǔ)句結(jié)合宿主變?cè)趫?zhí)行語(yǔ)句過(guò)程中, 數(shù)據(jù),式將數(shù)據(jù)寫(xiě)入這此變量中。執(zhí)行SQL 語(yǔ)句, 實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。宿主變量地址, 5.1.2 OracleSQLOracle 提供了四種處理動(dòng)態(tài) SQL 的方法, 這四種方法從一到四依次變得功能上說(shuō)也是依次包含關(guān)系, 即前法實(shí)現(xiàn)有關(guān)這四種方法的詳細(xì)介紹請(qǐng)參考相關(guān)手冊(cè)和 DEMO 程序.a. 方法一這種方法只能執(zhí)行非查詢(xún)語(yǔ)句, 且在非查詢(xún)動(dòng)態(tài) SQL 語(yǔ)句內(nèi)不能包含輸入宿主變行時(shí), Oracle 需要對(duì)語(yǔ)句進(jìn)行重新解釋。
13、strcpy(str_sql,“DELETEFROMtest001WHERE第 13 20 Oracle Pro*C 編程EXECSQLEXECUTEIMMEDIATE這種方法也只能用于執(zhí)行非查詢(xún)語(yǔ)句, 并且允Oracle Pro*C 編程EXECSQLEXECUTEIMMEDIATE這種方法也只能用于執(zhí)行非查詢(xún)語(yǔ)句, 并且允許非查詢(xún)動(dòng)態(tài) SQL 語(yǔ)句內(nèi)包含輸入SQLOracleSQL每次執(zhí)行時(shí)重新解釋 SQL 語(yǔ)句。Otest001valuesEXECSQLPREPAREtestFROMEXECSQLEXECUTEtestUSING:uname,這種方法可以執(zhí)行包括查詢(xún)語(yǔ)句在內(nèi)的動(dòng)態(tài) SQL
14、 語(yǔ)句, 但它要求在預(yù)編譯時(shí)刻動(dòng)SQLSQLSQL#實(shí)際就是把要執(zhí)行的動(dòng)態(tài)語(yǔ)句調(diào)入內(nèi)存, 以SELECTname,address,sexFROMtest001); select_stmt FROM :sql_stmt;c1CURSORFOR OPENWHENEVERNOTFOUNDDO 第 14 20 Oracle Pro*C 編程EXECSQLFETCHO:Name,:address,Name,Oracle Pro*C 編程EXECSQLFETCHO:Name,:address,Name,address, EXECSQLCLOSESQL SQL 語(yǔ)句。 這種方式對(duì)動(dòng)態(tài) SQL 語(yǔ)句的限制最小
15、, 它不要求在預(yù)編譯時(shí)確定動(dòng)動(dòng)態(tài) SQL 語(yǔ)句內(nèi)的選擇列表項(xiàng)數(shù),庫(kù)占位符數(shù)量以及宿主變量數(shù)據(jù)類(lèi)型, 這些描述信息, 從而使應(yīng)用程序能夠在運(yùn)行時(shí)刻處理這種類(lèi)型的動(dòng)態(tài) SQL 語(yǔ)句。SQLDA:調(diào)用 PREPARE 語(yǔ)句準(zhǔn)備宿主變量字符串中的動(dòng)態(tài)語(yǔ)句;位符數(shù)據(jù)量, 即N 元素;DESCRIBE第 15 20 Oracle Pro*C 編程5.2 ANSI5.2.1 ANSIPro*CANSI必須將DYNAMIC 預(yù)編譯選項(xiàng)值設(shè)置為 Oracle Pro*C 編程5.2 ANSI5.2.1 ANSIPro*CANSI必須將DYNAMIC 預(yù)編譯選項(xiàng)值設(shè)置為 5.2.2 ANSIOracleOracl
16、eDML和。5.2.3 ANSISQL#這一步實(shí)際上是對(duì)SQL語(yǔ)句進(jìn)行語(yǔ)法分析, 檢查#目的動(dòng)態(tài)SQL 語(yǔ)句中的輸入變量和輸SETDESCRIPTOR第 16 20 Oracle Pro*C 編程#defineMAX_ITEMSOracle Pro*C 編程#defineMAX_ITEMS #definecharcharvoidchar sql_stmt1024; jmp_bufjmp_continue; void main( )shortsif (connect()!=0)EXECSQLWHENEVERSQLERRORDO第 17 20 Oracle Pro*C 編程EXECSQL ALLO
17、CATEDESCRIPTORALLOCATEDESCRIPTOREXEC PREPAREmystmtFROMDECLAREOracle Pro*C 編程EXECSQL ALLOCATEDESCRIPTORALLOCATEDESCRIPTOREXEC PREPAREmystmtFROMDECLARECCURSORFORDESCRIBEINPUTmystmtUSINGDESCRIPTORf(nStartofopenSQLOPENCUSINGDESCRIPTORf(nEndofopenEXECSQLCLOSEputs(nGoodDEALLOCATE DESCRIPTOR InDesc; DEALLO
18、CATEDESCRIPTOROutDesc; WHENEVER SQLERROR CONTINUE; COMMIT WORK RELEASE;WHENEVERSQLERRORDO以上主函數(shù)中, connect()函數(shù)見(jiàn)本手冊(cè)前面部分。 voidsshort chardataBUF_LEN,第 18 20 Oracle Pro*C 編程EXECSQLDESCRIBEOUTPUTmystmtUSINGDESCRIPTOROutDesc; EXEC SQL GET DESCRIPTOR OutDesc :col_num=COUNT;f(nSorry,ThemaxcolumnOracle Pro*C 編程EXECSQLDESCRIBEOUTPUTmystmtUSINGDESCRIPTOROutDesc; EXEC SQL GET DESCRIPTOR OutDesc :col_num=COUNT;f(nSorry,ThemaxcolumnEXECSQLGETDESCRIPTOROu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園元旦活動(dòng)計(jì)劃8篇
- 2024年版企業(yè)勞動(dòng)協(xié)議參考文本版B版
- 2022幼兒手工教案
- 小區(qū)物業(yè)工作計(jì)劃
- 2024-2030年中國(guó)酚醛樹(shù)脂涂料行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 半導(dǎo)體激光治療儀項(xiàng)目可行性分析報(bào)告
- 大班健康活動(dòng)教案四篇
- 大學(xué)班主任工作計(jì)劃
- 美術(shù)教師個(gè)人工作總結(jié)5篇
- 醫(yī)學(xué)類(lèi)實(shí)習(xí)報(bào)告模板九篇
- 2024-2025學(xué)年河北省高三上學(xué)期省級(jí)聯(lián)測(cè)政治試題及答案
- 貴州省貴陽(yáng)市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 幼兒園班級(jí)管理中的沖突解決策略研究
- 【7上英YL】蕪湖市2023-2024學(xué)年七年級(jí)上學(xué)期英語(yǔ)期中素質(zhì)教育評(píng)估試卷
- 2024年度中國(guó)鈉離子電池報(bào)告
- 2024年問(wèn)政山東拆遷協(xié)議書(shū)模板
- 浪潮iqt在線(xiàn)測(cè)評(píng)題及答案
- 山東省青島市2023-2024學(xué)年高一年級(jí)上冊(cè)1月期末選科測(cè)試 生物 含解析
- 電工技術(shù)(第3版)表格式教案教學(xué)詳案設(shè)計(jì)
- 湖北省八校聯(lián)合體2025屆高二生物第一學(xué)期期末檢測(cè)試題含解析
- 度三年級(jí)語(yǔ)文上冊(cè)期末試卷(圖片版含答案)
評(píng)論
0/150
提交評(píng)論