動態SQL入門

2021-05-23 14:58:26 字數 1519 閱讀 8314

動態sql語句的理解

1. 動態sql的分類

根據要處理的sql語句的作用不同,可以使用三種不同型別的動態sql方法:

1) 使用execute immediate語句可以處理包括ddl(create、alter和drop)、dcl(grant、revoke)、dml(insert、update、 delete)以及單行select語句;

2) 使用open cursorname for sql_statement語句可以處理多行查詢操作;

3) 使用批量動態sql(forall)可以加快sql語句處理,進而提高plsql程式的效能。

2. 動態sql語法:

execute immediate語句:

define_variable用於指定存放單行查詢結果的變數;using in bind_argument用於指定存放傳遞給動態sql值的變數,即在dynamic中存在佔位符時使用;using out bind_argument用於指定存放動態sql返回值的變數。

3. 動態語法示例: 

通過六個示例理解動態sql:

示例1:

使用execute immediate執行簡單ddl語句

示例2:

使用execute immediate執行dcl語句

示例3:

使用execute immediate處理dml語句時,如果dml語句包含佔位符,那麼在execute immediate語句之後必須要帶有using子句;如果dml語句帶有returning子句,那麼在execute immediate語句之後必須帶有returning into子句,並且此時只能處理作用的單行上的dml語句,如果dml語句作用在多行上,則必須使用bulk子句。

示例4:

使用動態游標處理多行查詢類動態sql語句。

oracle通過使用bulk collect into子句處理動態sql中的多行查詢可以加快處理速度,從而提高應用程式的效能。當使用bulk子句時,集合型別可以是plsql所支援的索引表、巢狀表和varray,但集合元素必須使用sql資料型別。在oracle9i以後,有三種語句支援bulk子句,execute immediate,fetch和forall。

示例5:

在execute immediate中使用bulk collect into處理多行查詢返回結果。

示例6:

在forall語句中使用bulkinto語句。

1          d          wang     12

2          dsaf      wang     23

3          asdf      wang     34

4          liasdf    wang     

5          li          wang     

6          asdf      wang     

7          li          wang     

8          li          wang     

執行結果:

mybatis入門 動態sql

mybatis核心就是對sql語句進行靈活操作,通過表示式進行判斷,對sql進行靈活拼接 組裝。現有需求如下 需要查詢使用者,輸入的是使用者類,如果使用者的性別類不為空,則將性別作為查詢條件之一,如果使用者的姓名不為空,則將使用者姓名作為查詢條件之一。如果使用者兩個屬性都為空,則查詢所有使用者。將上...

Mybatis入門三 動態sql

mybatyis強大的功能之一就是可以方便的使用動態sql,以前使用jdbc來運算元據庫的時候,能感受到那種在根據不同條件進行拼接sql語句帶來的不方便。在mybatis中利用關係標籤就能很方便的解決這一問題。標籤 if choose where set trim foreach 實體類用員工 em...

Oracle入門(十四 18)之使用動態SQL

資料庫中的所有sql語句都經歷了不同的階段 解析 預執行 這可能嗎?檢查包括語法,物件存在,許可權等 繫結 獲取語句中引用的任何變數的實際值 執行 語句被執行。提取 結果返回給使用者。某些階段可能與所有語句無關 例如,提取階段適用於查詢,但不適用於dml。當pl sql子程式中包含sql語句時,解析...