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
)
LOOP
END LOOP;
END;
Như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.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