oracle存储过程—游标
游标 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;
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...