PB动态执行SQL

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.

相关文档
最新文档