PLSQL的游标怎么用语法是什么

PLSQL的游标怎么用语法是什么,第1张

CREATE

PROCEDURE

[dbo][pro_CURSOR]

AS

BEGIN

--声明一个游标

DECLARE

MyCURSOR

CURSOR

FOR

SELECT

userid,depid

FROM

users

--打开游标

open

MyCURSOR

--声明两个变量

declare

@userid

varchar(50)

declare

@depid

varchar(50)

--循环移动

fetch

next

from

MyCURSOR

into

@userid,@depid

while(@@fetch_status=0)

begin

update

users

set

description=(select

dep_des

from

department

where

depid=@depid)

where

userid=@userid

fetch

next

from

MyCURSOR

into

@userid,@depid

end

close

MyCURSOR

deallocate

MyCURSOR

END

A 在简单的游标中使用 FETCH

下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs

GO

DECLARE authors_cursor CURSOR FOR

SELECT au_lname FROM authors

WHERE au_lname LIKE "B%"

ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch

FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch

WHILE @@FETCH_STATUS = 0

BEGIN

-- This is executed as long as the previous fetch succeeds

FETCH NEXT FROM authors_cursor

END

CLOSE authors_cursor

DEALLOCATE authors_cursor

GO

au_lname

----------------------------------------

Bennet

au_lname

----------------------------------------

Blotchet-Halls

au_lname

----------------------------------------

B 使用 FETCH 将值存入变量

下例与上例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回给客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

USE pubs

GO

-- Declare the variables to store the values returned by FETCH

DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR

SELECT au_lname, au_fname FROM authors

WHERE au_lname LIKE "B%"

ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables

-- Note: The variables are in the same order as the columns

-- in the SELECT statement

FETCH NEXT FROM authors_cursor

INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch

WHILE @@FETCH_STATUS = 0

BEGIN

-- Concatenate and display the current values in the variables

PRINT "Author: " + @au_fname + " " + @au_lname

-- This is executed as long as the previous fetch succeeds

FETCH NEXT FROM authors_cursor

INTO @au_lname, @au_fname

END

CLOSE authors_cursor

DEALLOCATE authors_cursor

GO

Author: Abraham Bennet

Author: Reginald Blotchet-Halls

C 声明 SCROLL 游标并使用其它 FETCH 选项

下例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持所有滚动能力。

USE pubs

GO

-- Execute the SELECT statement alone to show the

-- full result set that is used by the cursor

SELECT au_lname, au_fname FROM authors

ORDER BY au_lname, au_fname

-- Declare the cursor

DECLARE authors_cursor SCROLL CURSOR FOR

SELECT au_lname, au_fname FROM authors

ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor

FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor

FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor

FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row

FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row

FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor

DEALLOCATE authors_cursor

GO

au_lname au_fname

---------------------------------------- --------------------

Bennet Abraham

Blotchet-Halls Reginald

Carson Cheryl

DeFrance Michel

del Castillo Innes

Dull Ann

Green Marjorie

Greene Morningstar

Gringlesby Burt

Hunter Sheryl

Karsen Livia

Locksley Charlene

MacFeather Stearns

McBadden Heather

O'Leary Michael

Panteley Sylvia

Ringer Albert

Ringer Anne

Smith Meander

Straight Dean

Stringer Dirk

White Johnson

Yokomoto Akiko

au_lname au_fname

---------------------------------------- --------------------

Yokomoto Akiko

au_lname au_fname

---------------------------------------- --------------------

White Johnson

au_lname au_fname

---------------------------------------- --------------------

Blotchet-Halls Reginald

au_lname au_fname

---------------------------------------- --------------------

del Castillo Innes

au_lname au_fname

---------------------------------------- --------------------

Carson Cheryl

游标包含两方面的内容:

●游标结果集:执行其中的Select语句所得到的结果集;

●游标位置:一个指向游标结果集内的某一条记录的指针

利用游标可以单独 *** 纵结果集中的每一行。游标在定义以后存在两种状态:关闭和打开。当游标关闭时,其查询结果集不存在;只有当游标打开时,才能按行读取或修改结果集中的数据。

使用游标

一个应用程序可以使用两种类型的游标:前端(客户)游标和后端(服务器)游标,它们是两个不同的概念。

无论使用哪一种游标,都需要经过如下几个步骤:

●定义游标

●打开游标

●从游标中 *** 作数据

●关闭游标

游标 其实就像是指针的东西 在你查询结果集的时候 游标是在第一条结果的前面 这样当你拨动游标的时候 他会向下移动一个位置 指向第二条记录 这样就会 读取出结果集中说有数据 比如 在C#中的read()方法 和java中的 next() 都是拨动游标的方法 我说的可能不太形象 楼主可以把它当做链表的指针 呵呵 楼主看看这里比较详细

>

游标:

作用:通常情况下,关系数据库中的 *** 作总是对整个记录集产生影响,例如使用SELECT语句检索数据表时,将得到所有满足该语句where子句中条件的记录,而在实际应用过程中,经常需要

每次处理一条或者一部分记录。在这种情况下,需要使用游标在服务器内部处理结果集合,他可

以有助于识别一个数据集合内部指定的记录,从而可以有选择的按记录执行 *** 作。

在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行 *** 作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

我们知道关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式,除非使用where  子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的 *** 作,而不是一次对整个结果集进行同一种 *** 作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案——那就是使用游标。

虽然我没怎么看懂你的意思。单给你集中方法依次输出:

1:你可以在便利数据库的时候,加上可滚动的结果集属性。这样基本上可以任意的 *** 作数据库数据。

Statement st = connectioncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE, ResultSetCONCUR_UPDATABLE);

ResultSet rs = stexecuteQuery(sql);

2:你也可以把数据库里面的所有数据读取到一个集合中,比如List中,遍历的时候更加方便,可以任意的 *** 作。

比如把你的ID、name以对象user放入到一个集合list中。

建议使用集合,因为java基本上所有的 *** 作都是面向对象的 *** 作。

以上就是关于PL/SQL的游标怎么用语法是什么全部的内容,包括:PL/SQL的游标怎么用语法是什么、SQL游标如何使用、数据库游标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9698047.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存