2024年4月2日发(作者:)
如何在PB中使用動態SQL語句
執行沒有輸入參數並且沒有返回結果集的SQL語句。
1.語法
E IMMEDIATE SQLStatement{USING TransactionObject};
其中SQLStatement是要執行的SQL語句,可以直接用引號將要執行的SQL引起來用,或者用字串變數
的形式提供SQL語句。通過使用字串變數可以在具體執行的時候才指定要執行什麼樣的SQL語句。
TransactionObject是用戶所使用的事務物件,缺省為SQLCA。
3.
應用實例
①建立一張資料庫表(base),SQL語句的表述用引號引起來直接使用。
E IMMEDIATE 'CREATE TABLE TEMP_TEST(ID NUMBER,NAME VARCHAR2(20))'
USING SQLCA;
②執行對資料庫記錄的操作,在表TEMP_TEST中插入一條記錄,SQL語句通過字串變數傳遞執行語句。
STRING ls_sql
ls_sql = "INSERT INTO TABLE TEMP_TEST VALUES(1,'張三')"
EXECUTE IMMEDIATE :ls_sql;
執行帶輸入參數但沒有返回結果集時的SQL語句。
1.語法
2.
3.
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
EXECUTE DynamicstagingArea{USING Parameterlist};
其中:DynamicstagingArea是PowerBuilder提供的一種資料類型。PowerBuilder本身提供了一個名字為
SQLSA的DynamicstagingArea類型的總體變數,用於保存要執行的動態SQL語句資訊。
4.應用實例
刪除TEMP_TEST表中的滿足一定條件的記錄。
5.
6.
7.
8.
int li_id
ll_id = 1
PREPARE SQLSA FROM "DELETE WHERE id=?";
EXECUTE SQLSA USING li_id;
執行有輸入參數並且返回結果集的格式在編譯時可以確定的SQL語句。
1.語法
E cursor DYNAMIC CURSOR FOR DynamicStagingArea;
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject};
3.
4.
5.
6.
OPEN DYNAMIC cursor {USING Parameterlist};
FETCH cursor INTO VariableList;
CLOSE cursor;
其中cursor是用戶所定義的游標的名字。
#應用實例
將表TEMP_TEST中的ID欄位大於1的所有記錄讀取出來並分別進行相應處理。
int li_id
string ls_sql,ls_name,ls_filter
ls_filter = 1
ls_sql="SELECT id,name FROM temp_test WHERE id>?"
DECLARE c1 DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_sql;
OPEN DYNAMIC c1 USING :ls_filter;
FETCH c1 INTO :li_id,:ls_name;
DO WHILE E=0
.
//對滿足條件的記錄根據要求分別進行處理
.
FETCH c1 INTO :li_id,:ls_name;
LOOP
CLOSE c1;
執行有輸入參數並且返回結果集的格式在編譯時無法確定的SQL語句。
1.語法
2.
3.
4.
5.
6.
7.
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語句的輸入輸出參數。
8.應用實例
將一個表中滿足過濾條件的記錄的所有欄位取出來分別進行處理,表名在程式運行中由字串變數傳遞,
欄位資訊是不確定的。這裏我們假設通過字串變數中傳遞的表名是TEMP_TEST。
ls_string,ls_sql,ls_table,ls_column
li_int
发布评论