PB动态执行SQL
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何在PB中使用動態SQL語句
執行沒有輸入參數並且沒有返回結果集的SQL語句。
1.語法
其中SQLStatement是要執行的SQL語句,可以直接用引號將要執行的SQL引起來用,或者用字串變數
的形式提供SQL語句。通過使用字串變數可以在具體執行的時候才指定要執行什麼樣的SQL語句。
TransactionObject是用戶所使用的事務物件,缺省為SQLCA。
3.應用實例
①建立一張資料庫表(base),SQL語句的表述用引號引起來直接使用。
②執行對資料庫記錄的操作,在表TEMP_TEST中插入一條記錄,SQL語句通過字串變數傳遞執行語句。
執行帶輸入參數但沒有返回結果集時的SQL語句。
1.語法
其中:DynamicstagingArea是PowerBuilder提供的一種資料類型。PowerBuilder本身提供了一個名字為
SQLSA的DynamicstagingArea類型的總體變數,用於保存要執行的動態SQL語句資訊。
4.應用實例
刪除TEMP_TEST表中的滿足一定條件的記錄。
執行有輸入參數並且返回結果集的格式在編譯時可以確定的SQL語句。
1.語法
其中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 SQLCA.SQLCODE=0
.
//對滿足條件的記錄根據要求分別進行處理
.
FETCH c1 INTO :li_id,:ls_name;
LOOP
CLOSE c1;
執行有輸入參數並且返回結果集的格式在編譯時無法確定的SQL語句。
1.語法
其中:DynamicDescriptionObject是PowerBuilder提供的一個資料類型,在PowerBuilder中提供了一個
DynamicDescriptionObject類型的全局資料類型SQLDA,用來存放動態SQL語句的輸入輸出參數。
8.應用實例
將一個表中滿足過濾條件的記錄的所有欄位取出來分別進行處理,表名在程式運行中由字串變數傳遞,欄位資訊是不確定的。這裏我們假設通過字串變數中傳遞的表名是TEMP_TEST。
11.DATETIME li_time
12.ls_sql="SELECT * FROM TEMP_TEST WHERE ID > ? "
13.PREPARE SQLSA FROM ls_sql;
14.DESCRIB SQLSA INTO SQLDA; //SQLDA中含有輸入參數的描述
15.DECLARE c1 DYNAMIC CURSOR FOR SQLSA;
16.SetDynamicparm(SQLDA,1,1) //傳遞參數值
17.OPEN DYNAMIC c1 USING DESCRIPTOR SQLDA;
18.FETCH c1 USING DESCRIPTOR SQLDA;
19.DO WHILE SALCA.SQLCODE=0
20. FOR li_int=1 TO SQLDA.NumOutPuts
21. CHOOSE CASE SQLDA.OutParmType[li_int]
22. CASE Typestring!
23. ls_string=GetDynamicString(SQLDA,li_int)
24. //處理該字元型的欄位
25. CASE TypeDateTime
26. ls_datetime=GetDynamicDateTime(SQLDA,li_int)
27. //處理該日期型的欄位
28. ...
29. //處理其他類型的欄位
30. ...
31. END CHOOSE
32. NEXT
33. //將一條記錄的所有欄位取完後作相應的處理
34. FETCH c1 USING DESCRIPTOR SQLDA;
35.LOOP
36.CLOSE c1;
37.