oracle存储过程—游标

今天 6359阅读 0评论

游标 CURSOR

--隐式游标 select into--只能返回一行数据

--显示游标 :处理多行数据,一行一行去处理数据的循环

语法1:

DECLARE
	cursor c_emp 
	IS
	select ename,sal from emp;---把查询到的emp表的数据放到游标c_emp中
	v_row c_emp%rowtype; --引用数据库中的一行(所有字段)作为数据类型
BEGIN
	open c_emp;--打开游标
		loop --循环
			fetch c_emp into v_row;--提取一行数据到变量
			exit when c_emp%notfound;--退出循环
			--处理这行数据
				dbms_output.put_line(rpad(v_row.ename,10,' ') || c_row.sal);
			end loop;--结束循环
	close c_emp;--关闭游标
end;

简写:for循环不需要打开关闭游标、fetch、exit

DECLARE
	cursor c_emp 
	IS
	select ename,sal from emp;---把查询到的emp表的数据放到游标c_emp中
BEGIN
		for x in  c_emp loop --循环
			--想怎么处理怎么处理
				dbms_output.put_line(rpad(x.ename,10,' ') || x.sal);
			end loop;--结束循环
end;

一些例子:

--想怎么处理怎么处理的例子
--把取出来的数据放到一张新表里面
DECLARE
	cursor c_emp 
	IS
	select ename,sal from emp;---把查询到的emp表的数据放到游标c_emp中
BEGIN
		for x in  c_emp loop --循环
			insert into emp_2017(ename,sal) values (x.ename,x.sal);
			end loop;--结束循环
end;
--如果薪水=2800奖金+3000
DECLARE
	cursor c_emp 
	IS
	select ename,sal from emp;---把查询到的emp表的数据放到游标c_emp中
	v_empno number;
	v_sal number;
BEGIN
		for x in  c_emp loop --循环
			v_empno:=x.empno;
			v_sal:=x.sal;
			if v_sal =1200 and v_sal =2800
				then update emp set comm=vl(comm,0)+3000 where empno =v_empno;
				COMMIT;--提交代码
			end if;
			end loop;--结束循环
end;

免责声明
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明。
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所
提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何
损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在
转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并白负版权等法律责任。

手机扫描二维码访问

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,6359人围观)

还没有评论,来说两句吧...

目录[+]