http://blog.sqlauthority.com/2007/01/01/sql-server-simple-example-of-cursor/
Trong Oracle, có vẻ việc sử dụng cursor linh động hơn, có 3 dạng sau:
1. Implicit Cursor: có nghĩa là dùng cursor một cách không tường minh
DECLARE l_descr hardware.descr%type; BEGIN SELECT descr INTO l_descr FROM hardware WHERE aisle = 1 AND item = 1; END;
2. Explicit Fetch Calls: dùng cursor lấy data một cách tường minh. Nếu dùng cách này có 3 keyword chủ chốt là Open, Fetch, và Close.
DECLARE CURSOR c_tool_list IS SELECT descr FROM hardware WHERE aisle = 1 AND item BETWEEN 1 AND 500; BEGIN OPEN c_tool_list; LOOP FETCH c_tool_list INTO l_descr; EXIT WHEN c_tool_list%notfound; END LOOP; CLOSE c_tool_list; END;
3. Implicit Fetch Calls: dung cursor lấy data một cách không tường minh
BEGIN FOR i IN ( SELECT descr FROM hardware WHERE aisle = 1 AND item BETWEEN 1 AND 500 ) LOOPNhưng cursor trong Oracle chưa dừng lại ở đây, tương ứng với 3 cách trên, có 3 cách tương ứng nhưng viết dưới dạng bulk sql, tức là xử lý nhiều record cùng 1 lúc.END LOOP; END;
1. Implicit Cursor BULK Mode: tương ứng cách 1 ở trên
DECLARE type t_descr_list IS TABLE OF hardware.descr%type; l_descr_list t_descr_list; BEGIN SELECT descr bulk collect INTO l_descr_list FROM hardware WHERE aisle = 1 AND item BETWEEN 1 AND 100; END;
2. Explicit Fetch Calls BULK Mode: tương ứng cách 2 ở trên
DECLARE CURSOR c_tool_list IS SELECT descr FROM hardware WHERE aisle = 1 AND item BETWEEN 1 AND 500; type t_descr_list IS TABLE OF c_tool_list%rowtype; l_descr_list t_descr_list; BEGIN OPEN c_tool_list; FETCH c_tool_list bulk collect INTO l_descr_list; CLOSE c_tool_list; END;Còn cách 3 ở trên không có gì thay đổi.
Khi dùng cursor trong Oracle, ta có thể đếm số dòng đã được lấy như sau:
cursorName%RowCount;
0 comments:
Post a Comment