for v_emp in c loop --不用定义v_emp,不用打开关闭游标了 dbms_output.put_line(v_emp.ename) ; end loop;
2)普通循环
declare --声明游标
cursor c is select * from emp; v_emp c%rowtype; --每条记录都存在里面 begin open c; --打开了游标才会执行那条select语句 loop -- 遍历需要循环 fetch c into v_emp;-- fetch把当前记录拿出来后 ,自动定位到下条记录 exit when(c%notfound); --游标退出的条件,确定有记录再打印 dbms_output.put_line(v_emp.ename) ; --不能放在exit前 ,否则最后一条记录打印两次 end loop; close c; --关闭该游标 end;
3) while循环: 先fetch再while判断
open c; fetch c into v_emp; while(c%found)loop dbms_output.put_line(v_emp.ename) ; fetch c into v_emp; end loop; close c;
4)带参数游标:
declare cursor c(v_deptno emp.deptno%type,v_job emp.job%type) is --- 两个条件,跟数据库列对应 select * from emp where deptno = v_deptno and job= v_job; begin for v_emp in c(30,'CLERK') loop ---实参,指出两个条件 dbms_output.put_line(v_emp.ename) ; end loop; end;
2.Exception
exception
when xxx(定义好的) then ...;
when others then ...;
3.select语句必须且只能返回一条记录,多的用游标
select ename,sal into v_ename,v_sal from emp where empno=7369; --有且只有一条返回值, --且必须加into
4.复合变量:
1)table:数组
type type_table_emp_empno is table of emp.empno%type --新建变量类型 type说明自定义类型,定义一个emp.empno的数组
2)record:类
a. type type_record_dept is record ( deptno dept.deptno%type, dname dept.dname%type, loc dept.loc%type );
1. 游标: 指在结果集的指针,用于遍历结果集1)for循环: 不需要声明存储的变量,不需要开关游标 for v_emp in c loop --不用定义v_emp,不用打开关闭游标了 dbms_output.put_line(v_emp.ename) ; end loop; 2)普通循环 declare