1.游标
游标使用分为四步骤。
a.声明游标
cursor 游标名(参数1 数据类型[,参数2 数据类型])
b.打开游标
open 游标名[(实际参数1[,实际参数2.........])];
c.提取数据
fetch 游标名 into 变量名1[,变量名2...];
或
fetch 游标名 into 记录变量
其中定义记录变量方法如下:
变量名 表名|游标名%ROWTYPE;
d.关闭游标
close 游标名;
例1:
declare
vname VARCHAR2(10);
vjob VARCHAR2(10);
--声明游标
CURSOR emp_cursor IS
SELECT ENAME,JOB
FROM EMP
WHERE empno=222;
BEGIN
OPEN emp_cursor;--打开游标
FETCH emp_cursor INTO vname,vjob;--从游标中提取数据
dbms_output.put_line(vname||','||vjob);
CLOSE emp_cursor;--关闭游标
end;
例2:用记录变量
DECLARE
--声明游标
CURSOR emp_cursor IS
SELECT ename,job,sal FROM emp WHERE empno=44;
--定义记录变量
emp_record emp_cursor%ROWTYPE;
BEGIN
--打开游标
OPEN emp_cursor;
--提取数据存入记录变量
FETCH emp_cursor INTO emp_record;
dbms_output.put_line(emp_record.ename||','||emp_record
.job||','||emp_record.sal);
--关闭游标
CLOSE emp_cursor;
END;
注意:获得记录变量的内容
记录变量名.字段名
自定义PL/SQL记录
方法一:
TYPE type_name IS RECORD(field_declaration[,field_declaration].....);
identifier type_name;
如上所示,如上所示,type_name用于指定记录类型的名称,field_declaration用于自定义记录成员
,identifier用于指定记录变量的名称,当定义记录成员时,记录成员之间需要用逗号隔开。
下个例子自定义了三个记录成员,以及记录变量emp_record
DECLARE
TYPE emp_record_name(
v_NAME emp.ename%TYPE,
v_salary emp.sal%TYPE,
v_dno emp.deptno%TYPE
);
emp_record emp_record_name;
..........
方法二:
--使用%ROWTYPE属性定义记录变量
%ROWTYPE属性用于基于表或视图定义记录变量。用此方法,记录成员的名称和类型与表或视图列的名
称和类型完全相同。
例子
dept_record detp%ROWTYPE;
3.游标循环
方法一:
在游标for循环中引用已定义游标
DECLARE
CURSOR emp_cursor IS
SELECT emono,ename
FROM emp;
BEGIN
FOR emp_record IN emp_cursor LOOP
dbms_output.put_line(emp_record.emono||','||emp_record.ename)
方法二:在游标循环中直接引用子查询
DECLARE
BEGIN
FOR re IN(SELECT empno,ename FROM emp)LOOP
dbms_output.put_line(re.empno||','||re.ename);
END LOOP;
END;