艾歐踢論壇

標題: Oracle之DBMS_SQL包用法详解 [打印本頁]

作者: admin    時間: 2019-10-23 06:17
標題: Oracle之DBMS_SQL包用法详解
通常运用DBMS_SQL包一般分为如下几步:
1. open cursor打开cursor
2. parse cursor:解析你要执行的SQL语句
3. bind variable:如果要执行的SQL语句中包含变量,在此就需要绑定变量
4. execute:执行SQL语句
5. close cursor:在执行后关闭此cursor.
如果你还需要返回执行SQL的结果集,还需要使用define_column,define_array等方法,具体可以看如下流程图:
Sql代码  [url=][/url]
  1. --  The flow of procedure calls will typically look like this:  
  2. --  
  3. --                      -----------  
  4. --                    | open_cursor |  
  5. --                      -----------  
  6. --                           |  
  7. --                           |  
  8. --                           v  
  9. --                         -----  
  10. --          ------------>| parse |  
  11. --         |               -----  
  12. --         |                 |  
  13. --         |                 |---------  
  14. --         |                 v         |  
  15. --         |           --------------  |  
  16. --         |-------->| bind_variable | |  
  17. --         |     ^     -------------   |  
  18. --         |     |           |         |  
  19. --         |      -----------|         |  
  20. --         |                 |<--------  
  21. --         |                 v  
  22. --         |               query?---------- yes ---------  
  23. --         |                 |                           |  
  24. --         |                no                           |  
  25. --         |                 |                           |  
  26. --         |                 v                           v  
  27. --         |              -------                  -------------  
  28. --         |----------->| execute |            ->| define_column |  
  29. --         |              -------             |    -------------  
  30. --         |                 |------------    |          |  
  31. --         |                 |            |    ----------|  
  32. --         |                 v            |              v  
  33. --         |           --------------     |           -------  
  34. --         |       ->| variable_value |   |  ------>| execute |  
  35. --         |      |    --------------     | |         -------  
  36. --         |      |          |            | |            |  
  37. --         |       ----------|            | |            |  
  38. --         |                 |            | |            v  
  39. --         |                 |            | |        ----------  
  40. --         |                 |<-----------  |----->| fetch_rows |  
  41. --         |                 |              |        ----------  
  42. --         |                 |              |            |  
  43. --         |                 |              |            v  
  44. --         |                 |              |    --------------------  
  45. --         |                 |              |  | column_value         |  
  46. --         |                 |              |  | variable_value       |  
  47. --         |                 |              |    ---------------------  
  48. --         |                 |              |            |  
  49. --         |                 |<--------------------------  
  50. --         |                 |  
  51. --          -----------------|  
  52. --                           |  
  53. --                           v  
  54. --                      ------------  
  55. --                    | close_cursor |  
  56. --                      ------------  
  57. --  
複製代碼


下面根据不同情况用例子详细展示:
在做展示之前,先准备一些基础数据
Sql代码  [url=][/url]


create table cux_demo (a number,b number,c number); begin   for i in 1 .. 15 loop     insert into cux_demo     values       (round(dbms_random.value, 2) * 100,        round(dbms_random.value, 2) * 100,        round(dbms_random.value, 2) * 100);   end loop;   commit; end; 基础数据完成之后,下面开始对一些具体情况进行分析:

1.执行一般的select语句
首先先介绍最常用情况:
Sql代码  [url=][/url]






3.使用variable_value显示DML后的返回结果(单条记录)
以上我们介绍了如何使用DBMS_SQL包来处理数据查询,如果我们把查询语句更换成DML语句,则可以完成各种DML操作。在PL/SQL中我们可以使用returning方法返回DML操作结果,在DBMS_SQL包中可不可以实现呢?答案当然是可以,用variable_value方法就可以实现。下面就分别用两个例子来展示如何实现,一个是返回单条记录,另一个是返回多条记录。
1)返回单条记录
Sql代码  [url=][/url]


2)返回多条记录
结合define_array使用,可以更好的完成DML操作。
Sql代码  [url=][/url]








歡迎光臨 艾歐踢論壇 (http://www.iot.idv.tw/ucenter/) Powered by Discuz! X3.2