程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 動態SQL語句的應用分析

動態SQL語句的應用分析

編輯:關於SqlServer
PowerBuilder提供了四種格式的動態SQL語句,每種格式都有自己不同的特點和作用。下面我們對各種格式的具體使用方法分別加以說明。
   (一)第一種格式
  當執行沒有輸入參數並且沒有返回結果集的SQL語句時可以使用這種格式,這種格式使用比較簡單,其實現的操作也比較少。
   1語法
   EXECUTE IMMEDIATE SQLStatement{USING TransactionObject};
  其中SQLStatement是要執行的SQL語句,可以直接用引號將要執行的SQL引起來用,或者用字符串變量的形式提供SQL語句。通過使用字符串變量可以在具體執行的時候才指定要執行什麼樣的SQL語句。TransactionObject是用戶所使用的事務對象,缺省為SQLCA。
   2應用實例
   ①建立一張數據庫表(base),SQL語句的表述用引號引起來直接使用。
   EXECUTE IMMEDIATE‘CREATE TABLE base(code char(6),name char(30))’USING SQLCA;
   ②執行對數據庫記錄的操作,在表base中插入一條記錄,SQL語句通過字符串變量傳遞執行語句。
   STRING lsSQL
   LsSQL=”INSERT INTO TABLE base VALUES(’320201’,’市中區支行’)”
   EXECUTE IMMEDIATE:lsSQL;
   (二)第二種格式
  當執行帶輸入參數但沒有返回結果集時的SQL語句可以采用第二種格式。該格式不僅可以動態地指定要執行的SQL語句,同時還可以動態地確定SQL語句所需要的參數值。
   1語法
   PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
   EXECUTE DynamicstagingArea{USING Parameterlist};
  其中:DynamicstagingArea是PowerBuilder提供的一種數據類型。PowerBuilder本身提供了一個名字為SQLSA的DynamicstagingArea類型的全局變量,用於保存要執行的動態SQL語句信息。
   2應用實例
   刪除base表中的滿足一定條件的記錄。
   STRING lsCode
   lsCode=”320101”
   PREPARE SQLSA FROM“DELETE base WHERE code=?”;
   EXECUTE SQLSA USING:lsCode;
   (三)第三種格式
  當執行有輸入參數並且返回結果集的格式在編譯時可以確定的SQL語句時可以使用第三種格式。這種格式語法比較復雜,但要比前面兩種功能強,可以返回結果集。在返回結果時由於不知道滿足過濾條件的記錄到底有多少條,因此第三種格式通常采用游標的形式。
   1語法
   DECLARE cursor DYNAMIC CURSOR FOR DynamicStagingArea;
   PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
   OPEN DYNAMIC cursor {USING Parameterlist};
   FETCH cursor INTO VariableList;
   CLOSE cursor;
   其中cursor是用戶所定義的游標的名字。
   2應用實例
  將表base中的code字段中間兩位為”01”的所有記錄讀取出來並分別進行相應處理。
   STRING lsSQL,lsCode,lsName,lsFilter
   LsFilter=”01”
   LsSQL=”SELECT code,name FROM base WHERE substring(code,3,2)=?”
   DECLARE cursor_base DYNAMIC CURSOR FOR SQLSA;
   PREPARE SQLSA FROM:lsSQL;
   OPEN DYNAMIC cursor_base USING:lsFilter;
   FETCH cursor_base INTO:lsCode,:lsName;
   DO WHILE SQLCA.SQLCODE=0
    .
    ∥對滿足條件的記錄根據要求分別進行處理
    .
    FETCH cursor_base INTO:lsCode,
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved