《转》数据库-游标

   一,游标是什么?

                 游标是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时放到了一个内存区域的虚表中,而这个虚表就是游标。

        二,作用是什么?

                  1,大家都知道数据库中的事物可以回滚,而游标在其中起着非常重要的作用,由于对数据库的操作我们会暂时放在游标中,只要不提交,我们就可以根据游标中内容进行回滚,在一定意义有利于数据库的安全。

                 2,另外,在Oracle中PL/SQL只能返回单行数据,而游标弥补了这个不足。相当于ADO.NET中的Data table吧。

         三,类型:

                1,隐式游标:增删改等操作Oracle都会自动创建游标,暂时保存操作结果,也就是能够回滚的操作都会引发游标的创建。

                2,显示游标:由开发人员通过程序显式控制,用于从表中取出多行数据,并将多行数据一行一行的单独进行处理.

 

         四,属性:

属性

注释

%rowcount 

 受SQL影响的行数

%found

 Boolean值,是否还有数据

%notfound

Boolean值,是否已无数据

%isopen

游标是否打开

 

    当然如果我们想获得隐式游标的属性,通过%前边加上SQL即可得到。例如SQL%rowcount.

 

        五,游标简单认识了,我们来看看游标的具体使用:

           1,先看一下简单的使用游标四步骤:

步骤

关键词

说明

1

在DECLARE中cursor

声明游标,创建一个命名的查询语句

2

Open

打开游标

3

Fetch

取出游标中的一条记录装入变量

4

Close

释放游标

 

 

          2,当然游标中可以存放一条数据,也可以存放多条数据,后者是我们用游标,前者我们通过PL/SQL语句即可完成的,这样我们在这里就必须用到循环结构了,在Oracle数据库中我们可以使用while…… loop……end loop , for…… loop……end loop,loop……end loop。在这里需要提出的是,for循环结构在Oracle中被简化了,我们只需要声明和使用即可。看下边这个例子吧:

 

 

  1. declare  
  2.   --定义记录类型的变量  
  3.   v_user user%rowtype;  
  4.   --1,利用cursor关键字声明游标  
  5.   cursor user_cur is  
  6.     select * from user;  
  7. begin  
  8.   --2,打开游标  
  9.   open user_cur;  
  10.   --3,利用fetch读取数据  
  11.   fetch user_cur  
  12.     into v_user;  
  13.   while user_cur%found loop  
  14.     dbms_output.put_line(v_user.userName);  
  15.     fetch user_cur  
  16.       into v_user;  
  17.   end loop;  
  18.   --4,释放游标  
  19.   close user_cur;  
  20. end;  

 

		declare
		  --定义记录类型的变量
		  v_user user%rowtype;
		  --1,利用cursor关键字声明游标
		  cursor user_cur is
		    select * from user;
		begin
		  --2,打开游标
		  open user_cur;
		  --3,利用fetch读取数据
		  fetch user_cur
		    into v_user;
		  while user_cur%found loop
		    dbms_output.put_line(v_user.userName);
		    fetch user_cur
		      into v_user;
		  end loop;
		  --4,释放游标
		  close user_cur;
		end;

        b,简化的for结构循环:

declare  

  1.   --1,利用cursor关键字声明游标  
  2.   cursor user_cur is  
  3.     select * from user;  
  4. begin  
  5.   --2,直接使用,Oracle会自动打开和关闭等操作。  
  6.    for v_user in user_cur loop  
  7.        dbms_output.put_line(v_user.userName);  
  8.     end loop  
  9. end;  

 

		declare
		  --1,利用cursor关键字声明游标
		  cursor user_cur is
		    select * from user;
		begin
		  --2,直接使用,Oracle会自动打开和关闭等操作。
		   for v_user in user_cur loop
		       dbms_output.put_line(v_user.userName);
		    end loop
		end;


   这里就介绍这两种的类型,loop的和这都差不多。

          3,最后在这里再学习一下带参数的游标,也是就和我们但参数的类是一样的,只不过一个用在了数据库中,一个用在了编程语言中。

declare  

  1.   --定义记录类型的变量  
  2.   v_User user%rowtype;  
  3.   --1,利用cursor关键字声明带参数的游标  
  4.   cursor user_Cur(v_UserNo number) is  
  5.     select * from user where  userNo=v_UserNo;  
  6. begin  
  7.   --2,打开带参数的游标,使之更加灵活 。  
  8.   open user_Cur(1012);  
  9.   --3,利用fetch读取数据  
  10.   loop  
  11.        fetch user_Cur into v_User;  
  12.        exit when user_Cur%notfound;  
  13.        dbms_output.put_line(v_user.userName);  
  14.   end loop;  
  15.   --4,释放游标  
  16.   close user_Cur;  
  17. end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容