一、游标(cursor)——游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
1、隐式游标:oracle服务器自动创建的游标,在PL/SQL程序中所有发出的DML和SELECT语句中,oracle会自动声明隐式游标。
2、显式游标:自定义的游标,为了处理由select语句返回的一组记录,需要在PL/SQL程序中声明和处理显式游标。
2.1、使用显式游标处理数据需要4个步骤:
1)声明游标:CURSOR cursor_name[parameter][return] is select_statement
2)打开游标:open cursor_name[value]
3)检索数据:fetch cursor_name into {vatiable_list | record_variable}
4)关闭游标:close cursor_name
3、循环
3.1、FOR..LOOP循环结构
Declare
CURSOR merchandise_cursor IS
SELECT * FROM 表 WHERE 条件
BEGIN
FOR r IN merchandise_cursor LOOP
Dbms_output.put(r.column||’’);
Dbms_output.put_line(r.column);
END LOOP;
END;
3.2、LOOP循环结构——无条件循环
LOOP
--STATEMENTS--
EXIT WHEN CONDITION
END LOOP;
注意:如果没有指定的EXIT语句,循环将一直运行;为了让循环能正常运行,必须为EXIT WHEN 子句提供一个在某时某刻可以判断为TRUE的条件。
例如
DECLARE
i number:=1;
BEGIN
LOOP
dbms_output.put_line(i || ' 的平方数为' || i*i);
i:=i+1;
EXIT WHEN i>10;
END LOOP;
END;
3.3、WHILE-LOOP循环结构
WHILE condition
LOOP
Statements;
END LOOP;
注意:
(1)使用游标FOR循环时,不能使用OPEN语句、FETCH语句和CLOSE语句,否则会产生错误。
(2)当使用隐式游标的属性时,需要在属性前加上SQL,因为Oracle在创建隐式游标时默认的游标名为SQL。
(3)使用游标时,在指定数据类型时,不能使用长度约束,如NUMBER(4)、VARCHAR(10)等都是错误的。
(4)FOR循环中的控制变量只能在循环内使用,不能够在循环的外部使用循环控制变量。