




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 1 Pro C程序設(shè)計 TigerConsultationStudio 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 2 目錄 Pro C概述Pro C基礎(chǔ)知識事務(wù)處理動態(tài)SQL技術(shù)總結(jié) 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 3 動態(tài)SQL技術(shù) 動態(tài)SQL編程是Pro C C 中一種比較高級的編程方法 它增強了應(yīng)用程序的靈活性和可擴展性 運行應(yīng)用程序在運行狀態(tài)時動態(tài)組織SQL語句并執(zhí)行和處理執(zhí)行結(jié)果 Oracle支持如下兩種動態(tài)SQL語句標準動態(tài)SQL語句Oracle高級動態(tài)SQL語句Oracle動態(tài)SQL不支持以下列表的數(shù)據(jù)類型 CURSOR類型結(jié)構(gòu)數(shù)組 arraysofstruct DML語句的返回子句 returning Unicode變量LOBS類型 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 4 動態(tài)SQL含義 動態(tài)SQL就是在應(yīng)用程序執(zhí)行期間組織 準備 執(zhí)行SQL語句的方法和技術(shù) 在一些應(yīng)用程序中需要根據(jù)業(yè)務(wù)邏輯特點接收應(yīng)用程序外部傳輸過來的變量 在運行時決定執(zhí)行什么結(jié)構(gòu)的SQL語句 例如 根據(jù)用戶輸入的表名 刪除該表對應(yīng)的數(shù)據(jù) 由于SQL變量在靜態(tài)SQL語句時不能應(yīng)用到DELETE表名位置的 所以沒有辦法在執(zhí)行過程中通過靜態(tài)SQL語句完成這樣的功能 而動態(tài)SQL語句則可以接受用戶輸入 動態(tài)的組織SQL語句 完成上述要求 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 5 動態(tài)SQL的優(yōu)缺點 優(yōu)點 增強應(yīng)用程序靈活性增強應(yīng)用程序擴展性完成靜態(tài)SQL所不能完成的工作缺點 編碼相對復(fù)雜執(zhí)行效率沒有靜態(tài)SQL好 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 6 動態(tài)SQL適用環(huán)境 在應(yīng)用程序執(zhí)行時 如果以下元素在編寫代碼時不確定就需要使用動態(tài)SQL SQL語句書寫方式SQL變量 宿主變量數(shù)目SQL變量 宿主變量數(shù)據(jù)類型未知Oracle數(shù)據(jù)庫Objects 表 視圖 索引 列等 屬性 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 7 動態(tài)SQL執(zhí)行條件 1 無論如何執(zhí)行動態(tài)SQL語句 都需要一個包含有效的SQL語句 不包括EXECSQL語句 或下面嵌入式SQL指令的字符串 ALLOCATECLOSEDECLAREDESCRIBEEXECUTEFETCHFREEGETINCLUDEOPENPREPARESETWHENEVER 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 8 動態(tài)SQL執(zhí)行條件 2 嵌入式SQL指令的字符串中 通常包含假的宿主變量這些假的宿主變量只為告訴預(yù)處理器在該位置需要進行變量替換這些假宿主變量不需要聲明 可以采用任意命名方式如下兩個語句對動態(tài)SQL來說是完全一樣的 盡管有 mgr number job title 和 m j 在樣式上的區(qū)別 這些假宿主變量通常稱為占位符號 DELETEFROMEMPWHEREMGR mgr numberANDJOB job title DELETEFROMEMPWHEREMGR mANDJOB j 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 9 動態(tài)語句執(zhí)行過程 通常一個應(yīng)用程序提示用戶輸入SQL語句組成要素到宿主變量中應(yīng)用程序根據(jù)宿主變量值組織SQL語句提交SQL語句到Oracle數(shù)據(jù)庫服務(wù)器進行語法檢查Oracle綁定 bind 宿主變量到準備好的SQL語句中 此時Oracle得到宿主變量的地址 以能對變量內(nèi)容進行讀寫Oracle執(zhí)行 execute 準備好的SQL語句隨著宿主變量的變化 Oracle可以重復(fù)執(zhí)行這條SQL語句 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 10 使用動態(tài)SQL的方法 方法1 無SQL變量的非查詢語句方法2 已知輸入變量個數(shù)的非查詢語句方法3 已知SELECT語句選取列和輸入宿主變量個數(shù)的查詢語句方法4 未知SELECT語句選取列或輸入宿主變量個數(shù)的查詢語句也適用于未知列名列表和輸入宿主變量的其他DML語句 只是其他語句處理比SELECT查詢定義游標要簡單 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 11 方法1 無SQL變量的非查詢語句 應(yīng)用程序接收外界輸入構(gòu)造SQL語句到一個字符串然后調(diào)用EXECUTEIMMEDIATE命令執(zhí)行這個SQL語句這種SQL語句不能為SELECT語句 不能包含輸入變量的占位符 例如 DELETEFROMEMPWHEREDEPTNO 20 GRANTSELECTONEMPTOscott 缺點此種方法每執(zhí)行一次SQL語句 數(shù)據(jù)庫都需要解析一遍SQL語句所以這種方法只適合運行一次或少數(shù)幾次 否則嚴重影響應(yīng)用程序效率 EXECUTEIMMEDIATE命令的語法為 EXECSQLEXECUTEIMMEDIATE host string string literal 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 12 方法1 代碼示例 chardynstmt1 10 VARCHARdynstmt2 80 EXECSQLEXECUTEIMMEDIATE CREATETABLEdyn1 col1VARCHAR2 4 strncpy dynstmt1 COMMIT 10 EXECSQLEXECUTEIMMEDIATE dynstmt1 strcpy dynstmt2 arr DROPTABLEDYN1 dynstmt2 len strlen dynstmt2 arr EXECSQLEXECUTEIMMEDIATE dynstmt2 EXECSQLCOMMITRELEASE 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 13 方法2 已知輸入變量個數(shù)的非查詢語句 應(yīng)用程序接受或組建一個SQL語句 并通過PREPARE和EXECUTE語句執(zhí)行這個SQL 不能是查詢語句 為輸入宿主變量準備的占位符數(shù)目和輸入宿主變量的類型必須已知 例如 INSERTINTOEMP ENAME JOB VALUES emp name job title DELETEFROMEMPWHEREEMPNO emp number 對方法2來說 SQL語句只在PREPARE時解析一次 以后可以執(zhí)行多次 并隨輸入宿主變量的不同而執(zhí)行結(jié)果不同 對于數(shù)據(jù)定義語句 DDLSQL 語句 例如CREATE和GRANT 隨PREPARE語句執(zhí)行 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 14 方法2 已知輸入變量個數(shù)的非查詢語句 PREPARE語法格式如下 EXECSQLPREPAREstatement nameFROM host string string literal PREPARE語句解析host string宿主變量對應(yīng)的SQL語句 并指定一個語句名稱statement name 語句名稱不是一個宿主變量 不需要聲明 只是一個編譯標識 EXECUTE語法格式如下 EXECSQLEXECUTEstatement name USINGhost variable list 其中host variable list格式如下 host variable1 indicator1 host variable2 indicator2 EXECUTE通過USING子句讀取輸入的宿主變量 執(zhí)行經(jīng)過PREPARE解析過的SQL語句statement name USING子句中如果一個是數(shù)組宿主變量 USING子句中的宿主變量必須全是數(shù)組類型 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 15 方法2 代碼示例 VARCHARdynstmt 80 intempno 1234 deptno1 97 i 0 strcpy dynstmt arr INSERTINTOEMP EMPNO DEPTNO VALUES v1 v2 dynstmt len strlen dynstmt arr EXECSQLPREPAREsql statementFROM dynstmt For i 0 i MAX i EXECSQLEXECUTEsql statementUSING empno deptno1 empno EXECSQLCOMMITRELEASE 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 16 方法3 1 構(gòu)造動態(tài)查詢語句 通過接受或構(gòu)建SQL語句 用DELCARE PREPARE和OPEN FETCH CLOSE語句執(zhí)行動態(tài)查詢SQL語句 并訪問查詢結(jié)構(gòu) 適用于已知SELECT查詢的各列 列類型 輸入宿主變量數(shù)目 輸入宿主變量類型的情況 例如 SELECTDEPTNO MIN SAL MAX SAL FROMEMPGROUPBYDEPTNO SELECTENAME EMPNOFROMEMPWHEREDEPTNO dept number 方法3同方法2比較相像 只是PREPARE關(guān)聯(lián)的語句需要管理和定義游標 必須知道表 視圖名 列名 而不能通過占位符號用宿主變量代替 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 17 方法3 2 對順序游標動態(tài)查詢處理邏輯用語句描述如下 PREPAREstatement nameFROM host string string literal DECLAREcursor nameCURSORFORstatement name OPENcursor name USINGhost variable list FETCHcursor nameINTOhost variable list CLOSEcursor name 對滾動游標動態(tài)查詢處理邏輯用語句描述如下 PREPAREstatement nameFROM host string string literal DECLAREcursor nameSCROLLCURSORFORstatement name OPENcursor name USINGhost variable list FETCH FIRST PRIOR NEXT LAST CURRENT RELATIVEfetch offset ABSOLUTEfetch offset cursor nameINTOhost variable list CLOSEcursor name 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 18 方法3 代碼示例 strcpy dynstmt arr SELECTenameFROMempWHEREdeptno v1 dynstmt len strlen dynstmt arr EXECSQLPREPARESFROM dynstmt EXECSQLDECLARECCURSORFORS EXECSQLOPENCUSING deptno EXECSQLWHENEVERNOTFOUNDDObreak for EXECSQLFETCHCINTO ename ename arr ename len 0 puts char ename arr EXECSQLCLOSEC 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 19 方法4 1 在用戶不知道SELECT語句選擇的列內(nèi)容或不明確輸入宿主變量個數(shù) 類型時 需要用描述字 descriptors 進行處理 例如下面描述的語句 INSERTINTOEMP VALUES SELECTFROMEMPWHEREDEPTNO 20 一個描述字 descriptor 是一塊描述用于在應(yīng)用程序和Oracle數(shù)據(jù)庫間執(zhí)行動態(tài)SQL所需變量信息的內(nèi)存區(qū)域 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 20 方法4 2 為了滿足這中情況下的動態(tài)查詢 應(yīng)用程序必須使用DESCRIBESELECTLIST命令 并且需要聲明一個SQLDecriptorArea SQLDA 類型的數(shù)據(jù)結(jié)構(gòu) 使用這個結(jié)構(gòu)來保存SELECT選擇的列信息 這個結(jié)構(gòu)也被稱作檢索描述字 SELECTDESCRIPTOR 如果應(yīng)用程序同時有多個活動的SQL語句 每一個活動的SQL語句必須有它自己的SQLDA 如果動態(tài)SQL語句包含一個未知的輸入宿主變量列表 host variablelist 則不能使用USING子句完成宿主變量值的傳入 在這種情況下 應(yīng)用程序必須執(zhí)行DESCRIBEBINDVARIABLES語句 并聲明被稱為綁定描述字 BINDDESCRIPTOR 的另一SQLDA種類變量 用于保存輸入宿主變量所需占位符信息 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 21 DESCRIBE語句 DESCRIBE語句初始化一個描述字 用于保存select list列信息或輸入宿主變量信息 如果指定了一個檢索描述字 DESCRIBESELECTLIST語句檢查PREPARE語句中的動態(tài)查詢語句的SELECT LIST列信息 得到列的名稱 列的類型 約束 長度 精度信息 并存儲這些信息到檢索描述字 如果指定了一個綁定描述字 DESCRIBEBINDVARIABLES檢查PREPARE語句中的占位符號 將信息存儲在綁定描述字中供后續(xù)程序使用 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 22 SQLDA 1 SQLDA是用來保存SELECT LIST列信息或輸入宿主變量信息的數(shù)據(jù)結(jié)構(gòu) SQLDA變量不能在DECLARESECTION段中定義 SQLDA變量包含下面SELECT LIST列信息 能被DESCRIBE的列的最大數(shù)量能被DESCRIBE的列的真實數(shù)量存儲列值緩沖區(qū)的地址列值的長度列值的數(shù)據(jù)類型指示變量值的地址存儲列名的緩沖區(qū)的地址存儲列名的緩沖區(qū)的長度列名稱的當前長度 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 23 SQLDA 2 SQLDA變量包含在一個動態(tài)SQL語句中所需要的輸入宿主變量的信息 能被DESCRIBE的占位符最大數(shù)量能被DESCRIBE的占位符的真實數(shù)量輸入宿主變量的地址輸入宿主變量的長度輸入宿主變量的數(shù)據(jù)類型指示變量的地址存儲占位符名稱的緩沖區(qū)的地址存儲占位符名稱的緩沖區(qū)的長度當前占位符名稱的長度存儲指示變量名的緩沖區(qū)地址存儲指示變量名的緩沖區(qū)的長度當前指變量名的長度 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 24 處理過程描述 EXECSQLPREPAREstatement nameFROM host string string literal EXECSQLDECLAREcursor nameCURSORFORstatement name EXECSQLDESCRIBEBINDVARIABLESFORstatement nameINTObind descriptor name EXECSQLOPENcursor name USINGDESCRIPTORbind descriptor name EXECSQLDESCRIBE SELECTLISTFOR statement nameINTOselect descriptor name EXECSQLFETCHcursor nameUSINGDESCRIPTORselect descriptor name EXECSQLCLOSEcursor name 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 25 使用SQLDA變量 SQLDA結(jié)構(gòu)定義在sqlda h頭文件中 通常應(yīng)用程序需要通過指針應(yīng)用SQLDA變量需要定義一個指向檢索描述字 SELECTDESCRIPTOR 的指針或一個指向綁定描述字 BINDDESCRIPTOR 的指針 includeSQLDA bind dp SQLDA select dp 然后通過使用SQLSQLDAAlloc函數(shù) Oracle8之前的sqlaldt函數(shù) 進行所需空間的分配 bind dp SQLSQLDAAlloc runtime context size name length ind name length 當應(yīng)用程序為非多線程時 runtime context采用SQL SINGLE RCTX代替 dvoid 0 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 26 SQLSQLDAAlloc函數(shù) SQLSQLDAAlloc函數(shù)的參數(shù)含義如下 SQLSQLDAAlloc runtime context max vars max name max ind name runtime context指向運行環(huán)境的指針max vars最大能DESCRIBE的SELECT LIST列和占位符號的數(shù)目max name占位符和SELECT LIST列名稱的最大長度max ind name最大指示變量長度 這個參數(shù)只用于分配綁定描述字 BINDDESCRIPTOR 空間 對分配檢索描述字 SELECTDESCRIPTOR 空間時 賦0即可 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 27 SQLDA結(jié)構(gòu) structSQLDA longN Descriptorsizeinnumberofentries char V PtrtoArrofaddressesofmainvariables long L PtrtoArroflengthsofbuffers short T PtrtoArroftypesofbuffers short I PtrtoArrofaddressesofindicatorvars longF NumberofvariablesfoundbyDESCRIBE char S PtrtoArrofvariablenamepointers short M PtrtoArrofmaxlengthsofvar names short C PtrtoArrofcurrentlengthsofvar names char X PtrtoArrofind var namepointers short Y PtrtoArrofmaxlengthsofind var names short Z PtrtoArrofcurlengthsofind var names 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 28 SQLDA結(jié)構(gòu)成員描述 1 NSELECT LIST列或占位符的最大數(shù)量 執(zhí)行DESCRIBE前必須執(zhí)行SQLSQLDAAlloc 函數(shù)給N進行賦值 設(shè)定描述數(shù)組的維數(shù) 其決定了描述字結(jié)構(gòu)成員數(shù)組的最大元素個數(shù) 在DESCRIBE命令后 必須將存儲在F中的變量真實個數(shù)賦值給N V是一個指向一個地址數(shù)組的指針 在該數(shù)組中存儲SELECT LIST列值或綁定變量的值 當使用SQLSQLDAAlloc函數(shù)時 系統(tǒng)給V 0 到V n 賦值為0 在使用selectdescriptors時 必須在FETCH語句前 給V指針數(shù)組分配內(nèi)存空間 應(yīng)為下列語句要用到兩種描述字具體的值 EXECSQLFETCH USING selectdescriptors 對于binddescriptors 必須在OPEN語句前分配空間EXECSQLOPEN USING binddescriptors 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 29 SQLDA結(jié)構(gòu)成員描述 2 LL是一個指向存放select list或bind variable變量值長度數(shù)組的指針 對于selectdescriptors DESCRIBESELECTLIST語句設(shè)置數(shù)組中各元素的值 對不在select list的對應(yīng)長度設(shè)置成該類型的可的定義的最大長度 在FETCH語句前 用戶可能需要重新修改變量長度 比如為了顯示原因 需要將NUMBER類型數(shù)據(jù)存儲到C語言char 類型 就需要通過SQLNumberPrecV6 函數(shù)得到NUMBER長度 然后轉(zhuǎn)換成字符串后的真實長度 對于binddescriptors 用戶必須在OPEN語句前 給數(shù)組成員賦對應(yīng)V變量成員長度的值 因為Oracle間接的通過使用存儲在V i 變量的地址訪問數(shù)據(jù)區(qū)域 如果不指定L i 變量 就不能得到V i 的存儲數(shù)據(jù)的長度 也就不能得到或給V i 指定的數(shù)據(jù)區(qū)域賦值 如果用戶需要更改V i 指定數(shù)據(jù)區(qū)域的長度 只需簡單更改L i 的值即可 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 30 SQLDA結(jié)構(gòu)成員描述 3 TT時指向一個數(shù)組的指針 在這個數(shù)組中存放這select list或者bind variable的數(shù)據(jù)類型 這個成員決定了Oracle數(shù)據(jù)存儲到V數(shù)組中時如何進行轉(zhuǎn)換 對于selectdescriptors DESCRIBESELECTLIST語句設(shè)置數(shù)據(jù)類型數(shù)組值為Oracle內(nèi)部數(shù)據(jù)類型 char number或date等 在進行FETCH前 用戶可能需要重新更改此數(shù)組某元素的值 因為Oracle內(nèi)部數(shù)據(jù)類型很難被C語言所采用 通常為了對select list對應(yīng)的selectdescriptors數(shù)據(jù)進行顯示 需要將數(shù)據(jù)類型轉(zhuǎn)換成varchar2或STRING類型 T i 的高位用來指示其對應(yīng)的select list列值的 NULL NOTNULL 狀態(tài) 在使用OPEN或FETCH語句前 需要調(diào)用SQLColumnNullCheck 接受T i 數(shù)據(jù)類型值 并清空高位NULL NOTNULL狀態(tài) 對于binddescriptors DESCRIBEBINDVARIABLES設(shè)置數(shù)據(jù)類型數(shù)組的各元素值為0 用戶必須在OPEN命令前設(shè)置各輸入宿主變量的數(shù)據(jù)類型 變量類型值采用Oracle外部數(shù)據(jù)類型描述 通常 綁定變量值存儲在字符串數(shù)組中 其對應(yīng)的T i 就設(shè)置為1 Varchar2 或者5 STRING 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 31 SQLDA結(jié)構(gòu)成員描述 4 I一個指向存儲指示變量值數(shù)組的指針 對于selectdescriptors 在FETCH語句前必須設(shè)置I數(shù)組各元素所指向的地址 EXECSQLFETCH USING selectdescriptor 如果第i個select list對應(yīng)列值為空 則I i 值為 1否則是個 0的整數(shù) 對于binddescriptors 須在OPEN語句前設(shè)置I數(shù)組各變量的值EXECSQLOPEN USING binddescriptor F存放通過DESCRIBE語句得到的select list或占位符的真實數(shù)目 如果經(jīng)過DESCRIBE語句后F小于零表示DESCRIBE語句發(fā)現(xiàn)的select list數(shù)目或占位符數(shù)目比分配描述符時指定的最大數(shù)據(jù)數(shù)目N大 例如 如果設(shè)置N 10但DESCRIBE發(fā)現(xiàn)select list的數(shù)目是11個 那么F將被設(shè)置成 11 這允許用戶根據(jù)此值重新調(diào)用SQLSQLDAAlloc函數(shù)分配大的描述符存儲區(qū)域 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 32 SQLDA結(jié)構(gòu)成員描述 5 S指向一個數(shù)組的指針 該數(shù)組存儲select list或占位符的名字 M指向一個數(shù)組的指針 該數(shù)組存儲了select list或占位符名字的最大長度 C指向一個數(shù)組的指針 該數(shù)組存儲了select list或占位符名字的當前長度 X指向一個存儲指示變量名字數(shù)組的指針 Y指向一個存儲指示變量名字最大長度數(shù)組的指針 Z指向一個存儲指示變量名稱當前長度數(shù)組的指針 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 33 轉(zhuǎn)換數(shù)據(jù)類型 在之前的應(yīng)用程序中 預(yù)編譯時對Oracle內(nèi)部和外部數(shù)據(jù)類型進行自動轉(zhuǎn)換 在DECLARESECTION變量聲明語句段 預(yù)編譯程序自動的將宿主變量類型轉(zhuǎn)換成等值的Oracle外部數(shù)據(jù)類型 如自動將int類型的宿主變量轉(zhuǎn)換成Oracle外部數(shù)據(jù)類型NUMBER 在方法4中 用戶可能需要人為的控制數(shù)據(jù)類型轉(zhuǎn)換 然后將轉(zhuǎn)換后的類型設(shè)置給SQLDA的T數(shù)組變量 Oracle內(nèi)部數(shù)據(jù)類型指定了數(shù)據(jù)在Oracle數(shù)據(jù)庫中的存儲格式 當使用DESCRIBESELECTLIST命令時 Oracle返回select list各列的內(nèi)部數(shù)據(jù)類型存儲到SQLDA的T變量 如第n個select list成員的數(shù)據(jù)類型被存儲到T n 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 34 基本步驟 1 1 在DECLARESECITON段聲明一個存放動態(tài)SQL語句的字符串變量2 定義用于selcet list和bind varibales的SQLDA變量描述字3 為檢索描述字 selectdescriptor 和綁定描述字 binddescriptor 分配空間4 設(shè)置描述字中select list列和bindvariables的最大數(shù)量5 給第一步定義的字符串宿主變量賦值SQL語句6 根據(jù)存放SQL語句的字符串宿主變量進行PREPARE7 為查詢DECLARE一個游標8 DESCRIBE綁定變量到綁定描述符9 重置綁定游標中最大占位符數(shù)目為DESCRIBE實際得到的占位符數(shù)目 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 35 基本步驟 2 10 得到綁定變量值 并給DESCRIBE發(fā)現(xiàn)的綁定變量分配存儲空間11 通過USING綁定描述符調(diào)用OPEN打開游標12 DESCRIBEselect list到檢索描述字 selectdescriptor 13 重置檢索描述字中select list實際選取的列數(shù)14 因為顯示原因 重置描述字中對應(yīng)select list變量的類型和長度15 調(diào)用FETCH 從數(shù)據(jù)中讀取數(shù)據(jù)到檢索描述字指向的內(nèi)存區(qū)域16 繼續(xù)FETCH到記錄集結(jié)束17 釋放空間18 關(guān)閉游標 2020 2 18 Tiger WangEmail Wangzhiyong512 MSN Wangzhiyong512 36 SQL語句描述 1 普通順序游標EXECSQLPREPAREstatement nameFROM host string string literal EXECSQLDECLAREcursor nameCURSORFORstatement name EXECSQLDESCRIBEBINDVARIABLESFORstatement nameINTObind descriptor name EXECSQLOPENcursor name
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高職大學(xué)生心理健康教育(微課版)課件 生命教育2
- 2025年高密度電阻率儀項目合作計劃書
- 租賃續(xù)租房屋合同
- 實習(xí)計劃范文模板(9篇)
- 風(fēng)險協(xié)議書(6篇)
- 2025年造紙化學(xué)品:制漿助劑項目合作計劃書
- DB31∕T 309-2015 梨樹栽培技術(shù)規(guī)范
- 物流系統(tǒng)分析 課件 項目八-任務(wù)一 認識物流系統(tǒng)評價
- 廉政準則精美課件
- 公司文件傳輸中心管理表
- 注塑模具基礎(chǔ)知識
- 公鐵兩用牽引車市場發(fā)展預(yù)測和趨勢分析
- 3.1 導(dǎo)數(shù)的概念 課件 《高等數(shù)學(xué)》
- 2024江西南昌云上國脈(江西)數(shù)字技術(shù)限公司招聘1人重點基礎(chǔ)提升難、易點模擬試題(共500題)附帶答案詳解
- 2024年湖南省長沙縣高橋鎮(zhèn)敬老院招聘院長歷年高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 2022-2023學(xué)年北京中橋外國語學(xué)校 高一數(shù)學(xué)文上學(xué)期摸底試題含解析
- 第2課古代希臘羅馬(教學(xué)課件)-【中職專用】《世界歷史》同步課堂(同課異構(gòu))(高教版2023?基礎(chǔ)模塊)
- FZT 81005-2017 絎縫制品行業(yè)標準
- 2024年北師大版五年級數(shù)學(xué)下冊導(dǎo)學(xué)案
- 閃蒸罐計算完整版本
- 物業(yè)小區(qū)安全生產(chǎn)隱患排查治理表
評論
0/150
提交評論