熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PB編程 >> 正文

淺析PowerBuilder下動態SQL語句[2]

2022-06-13   來源: PB編程 

  (四)第四種格式

  當執行有輸入參數並且返回結果集的格式在編譯時無法確定的SQL語句時可以使用第四種格式有時候我們執行一些SQL語句時不僅帶有參數而且返回的結果集中有多少個字段每個字段是什麼類型的數據都不確定這時只能使用第四種格式來實現

   語法

  PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};

  DESCRIB DynamicStagingArea INTO DynamicDescriptionObject;

  DECLARE cursor DYNAMIC CURSOR FOR DynamicDescriptionObject;

  OPEN DYNAMIC cursor USING DESCRIPTOR DynamicDescriptionObject;

  FETCH cursor USING DESCRIPTOR DynamicDescriptionObject;

  CLOSE cursor;

  其中DynamicDescriptionObject是PowerBuilder提供的一個數據類型在PowerBuilder中提供了一個DynamicDescriptionObject類型的全局數據類型SQLDA用來存放動態SQL語句的輸入輸出參數

   應用實例

  將一個表中滿足過濾條件的記錄的所有字段取出來分別進行處理表名在程序運行中由字符串變量傳遞字段信息是不確定的這裡我們假設通過字符串變量中傳遞的表名是base

  STRING lsStringlsSQLlsTablelsColumn

  INT liInt

  DATETIME liTime

  LsSQL=SELECT*FROM base WHERE code like?

  PREPARE SQLSA FROM lsSQL;

  DESCRIB SQLSA INTO SQLDA;∥SQLDA中含有輸入參數的描述

  DECLARE cursor_base DYNAMIC CURSOR FOR SQLSA;

  SetDynamicparm(SQLDA%)∥傳遞參數值

  OPEN DYNAMIC cursor_base USING DESCRIPTOR SQLDA;

  FETCH cursor_base USING DESCRIPTOR SQLDA;

  DO WHILE SALCASQLCODE=

  FOR liInt= TO SQLDANumOutPuts

  CHOOSE CASE SQLDAOutParmType[liInt]

  CASE Typestring!

  lsString=GetDynamicString(SQLDAliInt)

  ∥處理該字符型的字段

  CASE TypeDateTime

  LsDateTime=GetDynamicDateTime(SQLDAliInt)

  ∥處理該日期型的字段

  … ∥處理其他類型的字段

  … END CHOOSE

  NEXT

  ∥將一條記錄的所有字段取完後作相應的處理

  FETCH cursor_base USING DESCRIPTOR SQLDA;

  LOOP

  CLOSE cursor_base;

  結束語

  從上面的說明和舉例中可以看出動態SQL的特點是功能強使用靈活完全可以在程序代碼中動態地生成具體要執行的SQL語句是嵌入式SQL無法比擬的當然動態SQL語句在運行速度上可能要比嵌入式SQL語句略慢一點但隨著計算機處理速度的大幅度提高現在來說這一點已不成什麼問題因此使用動態SQL語句仍是一種非常可取的處理方法

[]  []  


From:http://tw.wingwit.com/Article/program/PB/201311/24648.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.