oracle中的游标
-- 声明游标;CURSOR cursor_name IS select_statement
--For 循环游标
--(1)定义游标
--(2)定义游标变量
--(3)使用for循环来使用这个游标
declare cursor yy is select * from mytest; c_row yy%rowtype; begin for c_row in yy loop dbms_output.put_line(c_row.id||'-'||c_row.name); end loop; end;
执行结果如下图
--Fetch游标
--使用的时候必须要明确的打开和关闭
declare cursor yy is select * from mytest; c_row yy%rowtype; begin open yy; loop fetch yy into c_row; exit when yy%notfound; dbms_output.put_line(c_row.id||'-'||c_row.name); end loop;
close yy; end;
--使用游标和while循环来显示所有部门的的地理位置(用%found属性)
declare --游标声明 cursor csr_TestWhile is --select语句 select LOC from Depth; --指定行指针 row_loc csr_TestWhile%rowtype; begin --打开游标 open csr_TestWhile; --给第一行喂数据 fetch csr_TestWhile into row_loc; --测试是否有数据,并执行循环 while csr_TestWhile%found loop dbms_output.put_line('部门地点:'||row_loc.LOC); --给下一行喂数据 fetch csr_TestWhile into row_loc; end loop; close csr_TestWhile; end;
--接收用户输入的部门编号,用for循环和游标,打印出此部门的所有雇员的所有信息(使用循环游标)
--CURSOR cursor_name[(parameter[,parameter],...)] IS select_statement;
--定义参数的语法如下:Parameter_name [IN] data_type[{:=|DEFAULT} value]
declare CURSOR c_dept(p_deptNo number) is select * from emp where emp.depno=p_deptNo; r_emp emp%rowtype; begin for r_emp in c_dept(20) loop dbms_output.put_line('员工号:'||r_emp.EMPNO||'员工名:'||r_emp.ENAME||'工资:'||r_emp.SAL); end loop; end;