動態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語句時,解析...