小魔女 发表于 2015-1-16 22:37:44

MSSQL网页设计PL/SQL用光标查询多笔记录

“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。PL/SQL光标为程序供应了从数据库当选择多行数据,然后对每行数据独自举行处置的办法,它为Oracle供应了一种唆使和把持SQL处置的各个阶段的办法。我将以为您已对PL/SQL有必定的懂得。经由过程本文,您将学会:
光标的创立光标的处置界说和利用光标属性1、甚么是光标
Oracle利用两种光标:显式光标和隐式光标。不论语句前往几条记录,PL/SQL为利用的每条UPDATE、DELETE和INSERT等SQL命令隐式的声明一个光标。(要办理SQL语句的处置,必需隐式的给它界说一个光标。)用户声明并利用显现光标处置SELECT语句前往的多笔记录。显现的界说光标一种布局,它利用户可以为特定的语句指定内存地区,以便今后利用。

2、光标的感化
当PL/SQL光标查询前往多行数据时,这些纪录组被称为举动集。Oracle将这类举动集存储在您创立的显现界说的已定名的光标中。Oracle光标是一种用于轻松的处置多行数据的机制,没有光标,Oracle开辟职员必需独自地、显式地取回并办理光标查询选择的每笔记录。
光标的另外一项功效事,它包括一个跟踪以后会见的纪录的指针,这使您的程序可以一次处置多笔记录。

3、利用显现光标的基础办法
步骤以下:
声明光标翻开光标从光标中取回数据封闭光标1、声明光标
声明光标的语法以下:
DECLAREcursor_name
Is
SELECTstatement
个中,cursor_name是您给光标指定的称号;SELECTstatement是给光标举动集前往纪录的查询。
声明光标完成了上面两个目标:
给光标定名;
将一个查询与光标联系关系起来。
值得注重的是,必需在PL/SQL块的声明部分声明光标;给光标指定的称号是一个未声明的标识符,而不是一个PL/SQL变量,不克不及给光标称号赋值,也不克不及将它用在表达式中。PL/SQL块利用这个称号来援用光标查询。
例:DECLARE
CURSORc1
Is
SELECTVIEW_NAMEFROMALL_VIEWS
WHEREROWNUM<=10;
别的还能够在光标界说语句中声明光标的参数,例:
CURSORc1(view_nbrnumber)
Is
SELECTVIEW_NAMEFROMALL_VIEWS
WHEREROWNUM<=view_nbr;
光标参数只对响应的光标是可见的,不克不及在光标局限以外援用该光标的参数。假如试图如许做,Oracle将前往一个毛病,指出该变量没有界说。
2、翻开光标
翻开光标的语法以下:
OPENcursor_name;
个中cursor_name是您之前界说的光标称号。
翻开光标将激活查询并辨认举动集,但是在实行光标取回命令之前,并没有真正取回纪录。OPEN命令还初始化了光标指针,使其指向举动集的第一笔记录。光标被翻开后,直到封闭之前,取回到举动集的一切数据都是静态的,换句话说,光标疏忽一切在光标翻开以后,对数据实行的SQLDML命令(INSERT、UPDATE、DELETE和SELECT)。因而只要在必要时才翻开它,要革新举动集,只需封闭偏重新翻开光标便可。
3、从光标中取回数据
FETCH命令以每次一笔记录的体例取回举动会合的纪录。一般将FETCH命令和某种迭代处置分离起来利用,在迭代处置中,FETCH命令每实行一次,光标行进到举动集的下一笔记录。
FETCH命令的语法:
FETCHcursor_nameINTOrecord_list;
个中,cursor_name是后面界说的光标的称号;record_list是变量列表,它承受举动会合的列。FETCH命令将举动集的了局安排到这些变量中。
实行FETCH命令后,举动会合的了局被取回到PL/SQL变量中,以便在PL/SQL块中利用。每取回一笔记录,光标的指针就移向举动集的下一笔记录。
例:
FETCHC1INTOVNAME;
WHILEC1%FOUNDLOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||||VNAME);
ENDLOOP;
个中,利用属性%FOUND使妥当FETCH抵达举动集的开头时,不会激发非常。别的属性及寄义见下表:
属性含量
%FOUND布尔型属性,当比来一次该纪录时乐成前往,则值为TRUE
%NOTFOUND布尔型属性,它的值总与%FOUND属性的值相反
%ISOPEN布尔型属性,当光标是翻开时前往TRUE
%ROWCOUNT数字型属性,前往已从光标中读取的纪录数

属性含量%FOUND布尔型属性,当比来一次该纪录时乐成前往,则值为TRUE%NOTFOUND布尔型属性,它的值总与%FOUND属性的值相反%ISOPEN布尔型属性,当光标是翻开时前往TRUE%ROWCOUNT数字型属性,前往已从光标中读取的纪录数
4、封闭光标
CLOSE语句封闭之前翻开的光标,使得举动集不断定。当用户的程序或会话停止时,Oracle隐式封闭光标。光标被封闭后,就不克不及对它实行任何操纵了,不然将激发非常。
CLOSE语句的语法是:
CLOSEcursor_name;
个中,cursor_name是之前翻开的光标的称号。
完全的程序代码以下:
DECLARE
CURSORC1ISSELECTVIEW_NAMEFROMALL_VIEWS
WHEREROWNUM<=10
ORDERBYVIEW_NAME;
VNAMEVARCHAR2(40);
BEGIN
OPENC1;
FETCHC1INTOVNAME;
WHILEC1%FOUNDLOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||||VNAME);
ENDLOOP;
END;
……CLOSEC1;

4、小结
光标是一种布局,可以以一次一笔记录的体例处置多行查询的了局.为每条DML语句创立隐式光标,而显式光标是由用户创立的,以便处置前往多笔记录的查询。并且,经由过程打消重复地剖析代码,光标进步了代码的处置速率。
有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。

只想知道 发表于 2015-1-19 19:11:16

比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。

再现理想 发表于 2015-1-28 09:43:43

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

金色的骷髅 发表于 2015-2-5 20:24:48

大家注意一点。如下面的例子:

小魔女 发表于 2015-2-13 13:06:38

相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐

莫相离 发表于 2015-3-3 21:35:09

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

若天明 发表于 2015-3-11 13:56:23

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

飘飘悠悠 发表于 2015-3-18 17:56:58

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

透明 发表于 2015-3-26 08:45:02

你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
页: [1]
查看完整版本: MSSQL网页设计PL/SQL用光标查询多笔记录