ORACLE和SQL SERVER中游标的使用

sql server中定义cursor:
DECLARE cursor_name CURSOR FOR select_statement


oracle中定义cursor:
DECLARE CURSOR cursor_name IS select_statement;



sql server中使用cursor:
OPEN cursor_name
FETCH NEXT FROM cursor_name INTO var_name WHILE @@FETCH_STATUS=0
print var_name
CLOSE cursor_name
DEALLOCATE cursor_name


实例:
下例显示如何嵌套游标以生成复杂的报表。为每个作者声明内部游标。
SET NOCOUNT ON
DECLARE @au_id varchar(11),
@au_fname varchar(20),
@au_lname varchar(40),
@message varchar(80),
@title varchar(80)
PRINT "-------- Utah Authors report --------"
DECLARE authors_cursor CURSOR FOR SELECT au_id, au_fname, au_lnameFROM authorsWHERE state = "UT" ORDER BY au_id
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " " SELECT @message = "----- Books by Author: " + @au_fname + " " + @au_lname
PRINT @message
-- Declare an inner cursor based
-- on au_id from the outer cursor.
DECLARE titles_cursor CURSOR FOR SELECT t.title FROM titleauthor ta, titles t WHERE ta.title_id = t.title_id AND ta.au_id = @au_id
-- Variable value from the outer cursor
OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title
IF @@FETCH_STATUS 0
PRINT " "
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @message = " " + @title
PRINT @message
FETCH NEXT FROM titles_cursor INTO @title
END
CLOSE titles_cursor
DEALLOCATE titles_cursor
-- Get the next author.
FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lnameEND
CLOSE authors_cursor
DEALLOCATE authors_cursorGO
-------- Utah Authors report
------------- Books by Author: Anne Ringer The Gourmet Microwave Is Anger the Enemy?----- Books by Author: Albert Ringer Is Anger the Enemy? Life Without Fear



oracle中使用游标的格式:
BEGIN
OPEN cursor_name;
LOOP
FETCH cursor_name INTO var_name
EXIT WHEN cursor_name%NOTFOUND;
END LOOP;
CLOSE cursor_name;
END


oracle的游标实例:下例显示如何嵌套游标以生成复杂的报表。为每个作者声明内部游标。
declare v_au_id varchar2(11);
v_au_fname varchar2(20);
v_au_lname varchar2(40);
v_title varchar2(80);
cursor authors_cursor is select au_id, au_fname, au_lname from authors where state = "UT" order by au_id;begin open authors_cursor;

loop
fetch authors_cursor into v_au_id,v_au_fname,v_au_lname;
exit when authors_cursor%notfound ;
dbms_output.put_line( '----- Books by Author: ' ||v_au_fname || ' ' || v_au_lname);
begin
declare cursor titles_cursor is select t.title from titleauthor ta, titles t where ta.title_id = t.title_id and ta.au_id = v_au_id;
begin
open titles_cursor;
loop
fetch titles_cursor into v_title;
exit when titles_cursor%notfound;
dbms_output.put_line(v_title);
end loop
end
end
end loop
end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值