游标 简单示例

CREATE PROCEDURE [dbo].[Test_TableCursor]

AS

DECLARE @Id int
DECLARE @ProductName nvarchar(50)
DECLARE @Message nvarchar(100)
DECLARE @Cmd nvarchar(400)

DECLARE TableCursor CURSOR FOR
SELECT [Id],[Name] FROM Data_Product

OPEN TableCursor

FETCH NEXT FROM TableCursor INTO @Id,@ProductName

WHILE @@FETCH_STATUS = 0
BEGIN
IF @@FETCH_STATUS = -2
CONTINUE

SELECT @Message = 'Get ' + Convert(nvarchar(50),@Id) + ' ' + @ProductName + '…'
PRINT @Message

SELECT @cmd = 'UPDATE Data_Product SET [Name] = '''+@ProductName +'1'' where [Id]= ' + Convert(nvarchar(20),@Id)
EXEC (@cmd)
PRINT ' '

FETCH NEXT FROM TableCursor INTO @Id,@ProductName
END

DEALLOCATE TableCursor

==================================================================================

@@FETCH_STATUS

返回值 说明


0 FETCH 语句成功。

-1 FETCH 语句失败或行不在结果集中。

-2 提取的行不存在。
==================================================================================

Oracle 版本

DECLARE CURSOR c IS SELECT id,name FROM data_news;

p_id number;
p_Name VARCHAR2(40);

BEGIN

OPEN c;

FETCH c INTO p_id,p_NAME;
WHILE c%FOUND LOOP
DBMS_OUTPUT.put_line(to_char(p_id)||p_NAME);
FETCH c INTO p_id,p_NAME;
END LOOP;

CLOSE c;

END;

==================================================================================

或者

LOOP
FETCH c INTO p_id,p_Name;
EXIT WHEN c%NotFOUND ;
DBMS_OUTPUT.put_line(to_char(p_id)||p_Name);
END LOOP;


CLOSE c;

==================================================================================

转载于:https://www.cnblogs.com/yoshow/archive/2007/05/10/742182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值