Power Builder-SQL動態語句
(1)執行沒有輸入參數並且沒有返回結果集的SQL語句時可以使用這種格式。
語法:
EXECUTE IMMEDIATE SQLStatement{USING TransactionObject};
1-1範例:EXECUTE IMMEDIATE‘CREATE TABLE base(code char(6),name char(30))’USING SQLCA;
1-2範例:STRING lsSQL
LsSQL=”INSERT INTO TABLE base VALUES(’320201’,’市中區支行’)”
EXECUTE IMMEDIATE:lsSQL;
(2)當執行帶輸入參數但沒有返回結果集時的SQL語句可以採用第二種格式。該格式不僅可以動態地指定要執行的SQL語句,同時還可以動態地確定
SQL語句所需要的參數值。
語法:
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
EXECUTE DynamicstagingArea{USING Parameterlist};
其中:DynamicstagingArea是PowerBuilder提供的一種資料類型。PowerBuilder本身提供了一個名字為SQLSA的DynamicstagingArea類型的總體變數,
用於保存要執行的動態SQL語句資訊。
2-1範例:刪除base表中的滿足一定條件的記錄。
STRING lsCode
lsCode=”320101”
PREPARE SQLSA FROM“DELETE base WHERE code=?”;
EXECUTE SQLSA USING:lsCode;
(3)當執行有輸入參數並且返回結果集的格式在編譯時可以確定的SQL語句時可以使用第三種格式。這種格式語法比較複雜,但要比前面兩種功能強,可以返回結果集。在返回結果時由於不知道滿足過濾條件的記錄到底有多少條,因此第三種格式通常採用游標的形式。
語法:
DECLARE cursor DYNAMIC CURSOR FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
OPEN DYNAMIC cursor {USING Parameterlist};
FETCH cursor INTO VariableList;
CLOSE cursor;
3-1範例:
將表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,:lsName;
LOOP
CLOSE cursor_base;
(4)當執行有輸入參數並且返回結果集的格式在編譯時無法確定的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語句的輸入輸出參數。
資料來源:http://www.programmer-club.com.tw/ShowSameTitleN/pb/537.html
語法:
EXECUTE IMMEDIATE SQLStatement{USING TransactionObject};
1-1範例:EXECUTE IMMEDIATE‘CREATE TABLE base(code char(6),name char(30))’USING SQLCA;
1-2範例:STRING lsSQL
LsSQL=”INSERT INTO TABLE base VALUES(’320201’,’市中區支行’)”
EXECUTE IMMEDIATE:lsSQL;
(2)當執行帶輸入參數但沒有返回結果集時的SQL語句可以採用第二種格式。該格式不僅可以動態地指定要執行的SQL語句,同時還可以動態地確定
SQL語句所需要的參數值。
語法:
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
EXECUTE DynamicstagingArea{USING Parameterlist};
其中:DynamicstagingArea是PowerBuilder提供的一種資料類型。PowerBuilder本身提供了一個名字為SQLSA的DynamicstagingArea類型的總體變數,
用於保存要執行的動態SQL語句資訊。
2-1範例:刪除base表中的滿足一定條件的記錄。
STRING lsCode
lsCode=”320101”
PREPARE SQLSA FROM“DELETE base WHERE code=?”;
EXECUTE SQLSA USING:lsCode;
(3)當執行有輸入參數並且返回結果集的格式在編譯時可以確定的SQL語句時可以使用第三種格式。這種格式語法比較複雜,但要比前面兩種功能強,可以返回結果集。在返回結果時由於不知道滿足過濾條件的記錄到底有多少條,因此第三種格式通常採用游標的形式。
語法:
DECLARE cursor DYNAMIC CURSOR FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
OPEN DYNAMIC cursor {USING Parameterlist};
FETCH cursor INTO VariableList;
CLOSE cursor;
3-1範例:
將表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,:lsName;
LOOP
CLOSE cursor_base;
(4)當執行有輸入參數並且返回結果集的格式在編譯時無法確定的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語句的輸入輸出參數。
資料來源:http://www.programmer-club.com.tw/ShowSameTitleN/pb/537.html