ORACLE CURSOR_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1721 | 回复: 0   主题: ORACLE CURSOR        下一篇 
unknsnow
注册用户
等级:上士
经验:272
发帖:78
精华:0
注册:2012-2-10
状态:离线
发送短消息息给unknsnow 加好友    发送短消息息给unknsnow 发消息
发表于: IP:您无权察看 2015-6-26 15:18:51 | [全部帖] [楼主帖] 楼主

游标分类:
1、显式 explicit
2、隐式 implicit

游标属性:
1、%FOUND 有数据可取(bool)
2、%ISOPEN 是否打开
3、%NOTFOUND 没有数据可取(bool)
4、%ROWCOUNT 已经取得游标的数量

一、DEFINITION OF CURSOR

DECLARE
CURSOR mycur IS
SELECT * FROM books; --DECLARE CURSOR
myrecord books%ROWTYPE; --DECLARE A RECORD ,AND THE RECORD PROPERTY IS FROM THE TABLE BOOKS
BEGIN
OPEN mycur; --OPEN CURSOR
FETCH mycur INTO myrecord;--FETCH ONE Record TO RECORD FROM CURSOR
WHILE mycur%FOUND LOOP -- LOOP WHEN HAS RECORDS
DBMS_OUTPUT.PUL_LINE(myrecord.books_id ',' myrecord.books_name);
FETCH mycur INTO myrecord;--FETCH ONE Record TO RECORD FROM CURSOR AGAIN
END LOOP; --END LOOP
CLOSE mycur;--CLOSE CURSOR
END;
/


二、CURSOR WITH PARAMETER

DECLARE
CURSOR cur_para(id varchar2) IS --The parameter just need a type
SELECT books_name FROM books WHERE books_id=id;
t_name books.books_name%TYPE;
BEGIN
OPEN cur_para('0001');
LOOP
FETCH cur_para INTO t_name;
EXIT WHEN cur_para%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_name);
END LOOP;
CLOSE cur_para;
END;
/


三、DECLARE CURSOR WITH PARAMETER USE FOR..LOOP

DECLARE
CURSOR cur_para(id varchar2) IS
SELECT books_name FROM books WHERE books_id=id;
BEGIN
DBMS_OUTPUT.PUT_LINE('*********************');
FOR cur IN cur_para('0001') LOOP --FOR LOOP, NO NEED TO DECLARE THE cur.
DBMS_OUTPUT.PUT_LINE(cur.books_name);
END LOOP;
END;
/


四、DECLARE CURSOR WITH PARAMETER (%ISOPEN)

DECLARE
t_name books.books_name%TYPE;
CURSOR cur(id varchar2) IS
SELECT books_name FROM books WHERE books_id=id;
BEGIN
IF cur%ISOPEN THEN --%ISOPEN
DBMS_OUTPUT.PUT_LINE('CURSOR HAS BEEN OPENED!');
ELSE
OPEN CUR('0003');
END IF;
FETCH cur INTO t_name;
CLOSE cur;
DBMS_OUTPUT.PUT_LINE(t_name);
END;
/


五、DECLARE CURSOR (%ROWCOUNT)

DECLARE
t_name varchar2(10);
CURSOR mycur IS
SELECT books_name FROM books;
BEGIN
OPEN mycur;
LOOP
FETCH mycur INTO t_name;
EXIT WHEN mycur%NOTFOUND OR mycur%NOTFOUND IS NULL;
DBMS_OUTPUT.PUT_LINE('游标mycur的ROWCOUNT是:' mycur%ROWCOUNT);--GET THE CURRENT ROW NUMBER
END LOOP;
CLOSE mycur;
END;
/


五、DECLARE CURSOR FOR UPDATE

DECLARE
CURSOR cur IS
SELECT books_name FROM books FOR UPDATE;--DECLARE FOR UPDATE
text varchar2(10);
BEGIN
OPEN cur;
FETCH cur INTO text;
WHILE cur%FOUND LOOP
UPDATE books SET books_name=books_name '_t' WHERE CURRENT OF cur;
FETCH cur INTO text;
END LOOP;
CLOSE cur;
END;
/


六、DECLARE CURSOR --implicit

--This is a way of implicit CURSOR,and the FOR..LOOP no need to declare cur.Like POINT THREE.
BEGIN
FOR cur IN(SELECT books_name FROM books) LOOP
DBMS_OUTPUT.PUT_LINE(cur.books_name);
END LOOP;
END;
/


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论