PowerBuilder動態(tài)SQL語句及在組合查詢中的應用_第1頁
PowerBuilder動態(tài)SQL語句及在組合查詢中的應用_第2頁
PowerBuilder動態(tài)SQL語句及在組合查詢中的應用_第3頁
PowerBuilder動態(tài)SQL語句及在組合查詢中的應用_第4頁
PowerBuilder動態(tài)SQL語句及在組合查詢中的應用_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、PowerBuilder不僅支持在PowerScript中使用標準嵌入SQL語句,而且支持 使用動態(tài)SQL句。動態(tài)SQL句可以解決嵌入SQ印句不支持DD印句的問題, 還能夠在運行時構成SQL 語句以解決在編譯時不知道語句的具體格式或參數(shù)的 問題。作者在“撫順機動車輛管理信息系統(tǒng)”的開發(fā)過程中,對動態(tài)SQL語句的使用有了深刻的體會,車輛信息項目繁多而且組合條件復雜多變,使用該語句, 不僅查詢速度較高而且使用靈活可靠。下面就各動態(tài)SQLgHCI的使用格式、方法 及各自的特點給予簡單介紹,然后以查找車輛為例介紹動態(tài)SQL語句(格式4)在組合查詢中的應用。一、態(tài)SQL語句格式PowerBuilder有

2、四種動態(tài)SQLf&式,每種格式用于處理編譯過程中的不同 情況。格式1:既沒有輸入?yún)?shù),也沒有輸出結果集格式2:有輸入?yún)?shù),但沒有輸出結果集格式3:輸入?yún)?shù)和結果集的列已知格式4:輸入?yún)?shù)和結果集在編譯時有一個或都未知.動態(tài)SQL語句格式格式EXECUTE IMMEDIATE SQLStatemenUSING TransactionObject;參數(shù)描述SQLStatement是包括一條有效SQL語句的字符串。該字符串可以是常量或者冒 號后面跟PowerBuilder變量(如:mysql )。該字符串必須只包括在一行上,且 不能包含表達式。TransactionObject(可選項)數(shù)據(jù)庫的事務

3、對象名執(zhí)行這種格式的SQL旬沒有結果集、也不需要輸入?yún)?shù)。這種格式可用來執(zhí)行所有形式的數(shù)據(jù)定義語言(DDL o以下是一段建立車輛臨時視圖的例子:string sqlsql= CREATVIEWtemp_vehicle AS SELECTcode , master FROMVehicle EXECUTE IMMEDIATE :sql USING SQLDA;.動態(tài)SQL語句格式格式PREPARE DynamicStagingArea FROM SQLStatement USING TransactionObject ;EXECUTE DynamicStagingArea USING Parame

4、terList;參數(shù)描述DynamicStagingArea DynamicStagingArea 變量名(通常為 SQLSASQLStatement包含一條有效SQL句的字符串。該字符串可以是常量或者冒號 后面跟 PowerBuilder變量(如:mysql )。在該語句中每個參數(shù)鍵入問號。TransactionObject(可選項)定義數(shù)據(jù)庫的事務對象名ParameterList(可選項)用冒號分隔的 PowerScript變量列表以下是一段使用格式2的腳本:int id = 156 / 車輛 IDString master / 車主SetNull(master) / 設成 NULL.PR

5、EPARE SQLSAFROM INSERT INTO vehicle VALUES (?,?);EXECUTE SQLSA USING :id, :master ;用這種SQL語句格式執(zhí)行沒有結果集、但需要輸入?yún)?shù)??捎脕韴?zhí)行所有形 式的數(shù)據(jù)庫定義語言(DDL 。. 動態(tài)SQL句格式格式DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;PREPARE DynamicStagingArea FROM SQLStatementUSING TransactionObject;OPEN DYNA

6、MIC Cursor USING ParameterList;EXECUTE DYNAMIC Procedure USING ParameterList;FETCH Cursor | Procedure INTO HostVariableList ;CLOSE Cursor | Procedure ;參數(shù)描述Cursor or Procedure cursor 或 procedure 名DynamicStagingArea DynamicStagingArea 變量名(通常為 SQLSA。SQLStatement一條有效SQL SELECTS句的字符串。該字符串可以是常量或變量。Transac

7、tionObject(可選項)定義數(shù)據(jù)庫的事務對象名ParameterList(可選項)用豆號分隔的 PowerScript變量列表HostVariableList把數(shù)據(jù)值提取到PowerScript變量的列表以下是一段使用格式3的腳本:DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA南朋動態(tài)游標integer Vehicle_id/查找的車輛 IDstring Mark= BMW/廠牌是 BMWstring sqlstatementsqlstatement = SELECT id FROM vehicle +WHERE mark = ? /SQL 語句 P

8、REPARE SQLSA FROM :sqlstatement ; / 在 SQLSA準備 SELECTS旬 OPEN DYNAMIC my_cursor using :Mark ;/執(zhí)行SQL語句,結果存入動態(tài)游標 my_cursor中FETCH my_cursor INTO :Vehicle_id ;/ 從 my_cursor 中提取結果CLOSE my_cursor ;/關閉游標此種sQl語句的執(zhí)行,需輸入?yún)?shù)和知道結果集的列。.動態(tài)SQL語句格式格式DECLARE Cursor|Procedure DYNAMIC CURSOR|PROCEDURE FOR DynamicStagingA

9、rea;PREPARE DynamicStagingArea FROM SQLStatement USING TransactionObject;DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea;OPEN DYNAMIC Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;EXECUTE DYNAMIC Cursor | Procedure USING DESCRIPTOR DynamicDescriptionArea ;FETCH Cursor | Procedu

10、re USING DESCRIPTOR DynamicDescriptionArea ;CLOSE Cursor | Procedure ;參數(shù)描述Cursor or Procedure cursor 或 procedure 名DynamicStagingArea DynamicStagingArea 變量名(通常為 SQLSA。SQLStatement SQLSELECTS句的字符串。該字符串可以是常量或變量。在該語句中,給每個參數(shù)的值賦予問號(?)。TransactionObject(可選項)定義數(shù)據(jù)庫的事務對象名DynamicDescriptionArea DynamicDescript

11、ionArea 變量名(SQLDA)二、動態(tài)SQL語句格式4的使用方法.輸入?yún)?shù)可以設置PREPARE句中每個輸入?yún)?shù)的類型和值。在DESCRIB踣句執(zhí)行時,PowerBuilder 填充 SQLDAH,性 NumInputs 的值??梢允褂?SetDynamicParm 函數(shù)來設置指定參數(shù)的類型和值。輸入?yún)?shù)是可選的,但如果使用它們,必須在執(zhí)行OPEN EXECUTE旬之前為全部輸入?yún)?shù)賦值。.輸出參數(shù)可以存取PREPARE句中出現(xiàn)的每個輸出參數(shù)的類型和值。 如果數(shù)據(jù)庫支持 輸出參數(shù)描述,則在 DESCRIB耿行時,PowerBuilder填充SQLDA屬性 NumOutputs的值,否則在

12、FETCH執(zhí)行時填充SQLDA屬性NumOutputs的值。FETCH旬執(zhí)彳亍后,DynamicDescriptionArea 變量(SQLDA聲可以被訪問的 屬性有:NumInputs 輸入?yún)?shù)的個數(shù)InParmType輸入?yún)?shù)類型數(shù)組NumOutputs輸出參數(shù)的個數(shù)OutParmType輸出參數(shù)類型數(shù)組.用于獲取輸出參數(shù)值的函數(shù)GetDynamicDateGetDynamicDateTimeGetDynamicNumberGetDynamicStringGetDynamicTime.輸入/輸出參數(shù)的數(shù)據(jù)類型TypeBoolean!TypeDate!TypeDateTime!TypeDec

13、imal!TypeDouble!TypeInteger!TypeLong!TypeReal!TypeString!TypeTime!TypeUInt!TypeULong!TypeUnknown!下面的程序段使用了格式4的動態(tài)SQL語句。string SqlstatementSqlstatement = SELECT id FROM vehicle +WHERE mark = ? PREPARE SQLSA FROM :Sqlstatement ;DESCRIBE SQLSA INTO SQLDA ; /收口果DESCRIB踣句執(zhí)彳T成功,貝U輸入描述數(shù) 組必須 在open句執(zhí)行之前賦值. DE

14、CLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;SetDynamicParm(SQLDA, 1, MA)OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;FETCH my_cursor USING DESCRIPTOR SQLDA ; /FETCH功,則輸出描述數(shù)組 含有結/亞集CLOSE my_cursor;.使用 PowerBuilder 數(shù)據(jù)類型 DynamicStagingArea 和 DynamicDescriptionAreaDynamicStagingArea 是 PowerBuilder 的一種數(shù)據(jù)

15、類型。PowerBuilder 用 該類型變量保存在接下來的語句中使用的信息。DynamicStagingArea是執(zhí)行語句和事務對象之間的唯一聯(lián)系者,它在PowerBuilder內(nèi)部使用,用戶無法存取其中的信息。PowerBuilder提供一個名為SQLSA的DynamicStagingArea全局 變量,用戶需要使用時,調(diào)用 SQLSA3可。DynamicDescriptionArea 是 PowerBuilder 的另一種數(shù)據(jù)類型。PowerBuilder用該類型變量保存動態(tài)SQL語句格式4中有關輸入輸出參數(shù)的信 息。PowerBuilder 同樣提供一個名為 SQLDA勺 Dynami

16、cDescriptionArea 型全 局變量,當需要使用時,可以用 SQLDAH用它。使用動態(tài)SQL語句格式4時,應該特別注意以正確的次序執(zhí)行這些語句。三、實例下面的圖例是車輛管理系統(tǒng)中的組合查詢界面,用來收集查詢條件,條 件表達式存于字符串變量condition_sum中。Sqlstatement = SELECT count(*) FROM vehicle where +condition_sum PREPARE SQLSA FROM :Sqlstatement ;DESCRIBE SQLSA INTO SQLDA ;DECLARE my_cursor DYNAMIC CURSOR FO

17、R SQLSA ;OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;FETCH my_cursor USING DESCRIPTOR SQLDA ;Find_num = GetDynamicNumber(SQLDA, 1)/取出滿足條件的記錄數(shù)CLOSE my_cursor ;Sqlstatement=SELECT id,code,master,tele + FROM vehicle where +condition_sumPREPARE SQLSA FROM :Sqlstatement ;DESCRIBE SQLSA INTO SQLDA ;DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;OPEN DYNAMIC my_curso

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論