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