oralce 游标
程序员文章站
2024-02-10 13:59:58
...
1,一般游标、参数游标。
3,可以把游标查询出来的行,作为rowtype来引用,下面是实例
4,游标的for循环(比一般的游标操作方法要简单的多)
5,隐式游标
显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;而对于非查询语句,如修改、删除操作,则由ORACLE 系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为SQL,这是由ORACLE 系统定义的。对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的、最新处理的一条SQL 语句所包含的数据。
实例:删除EMPLOYEES表中某部门的所有员工,如果该部门中已没有员工,则在DEPARTMENT表中删除该部门
declare
deptrec department%rowtype;
dept_name department.name%type;
dept_id department.id%type;
cursor c1 is
select d.id,d.name from department d where id <= 1254;
--定义游标的参数必须是输入参数
cursor c2(c_dept_id department.id%type default 1262,c_dept_name department.name%type) is
select d.id,d.name from department d where d.id < c_dept_id and d.name = c_dept_name;
begin
open c1;
fetch c1 into dept_id,dept_name;
while c1%found loop
dbms_output.put_line(dept_id || '---' || dept_name);
fetch c1 into dept_id,dept_name;
end loop;
close c1;
dbms_output.put_line('*********************************');
--注意在打开游标的时候向游标传递参数,注意这里传递参数方式采用的“名称传值法”(可以不按照定义游标的参数的顺序传值)
--特别注意:游标的参数是用在游标对应的sql语句中,处理游标对应的sql别的任何地方访问不到这个传递的参数。
open c2(c_dept_name => 'chenchaoyang',c_dept_id => 562);
fetch c2 into dept_id,dept_name;
while c2%found loop
dbms_output.put_line(dept_id || '--' || dept_name);
fetch c2 into dept_id,dept_name;
end loop;
--dbms_output.put_line(c_dept_name);
close c2;
end;
3,可以把游标查询出来的行,作为rowtype来引用,下面是实例
declare
cursor cur(moneyName varchar2) is
select * from money m where m.name like moneyName;
cursor_rowtype cur%rowtype; --注意此种用法非常方便
begin
open cur('20元');--注意此处用的是oracle的位置传参法,也可以写成open cur(moneyName => '20元');
fetch cur into cursor_rowtype;
while cur%found loop
dbms_output.put_line(cursor_rowtype.miane);
fetch cur into cursor_rowtype;
end loop;
close cur;
end;
4,游标的for循环(比一般的游标操作方法要简单的多)
declare
cursor cur(moneyName varchar2) is
select * from money m where m.name like moneyName;
cursor_rowtype cur%rowtype;
begin
--隐含的打开游标
for each_record in cur(moneyName => '20元') loop
--隐含的取出游标的数据
dbms_output.put_line(each_record.miane || ',,,' || each_record.name);
end loop;
--隐含的关闭游标
end;
5,隐式游标
显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;而对于非查询语句,如修改、删除操作,则由ORACLE 系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为SQL,这是由ORACLE 系统定义的。对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE 系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的、最新处理的一条SQL 语句所包含的数据。
实例:删除EMPLOYEES表中某部门的所有员工,如果该部门中已没有员工,则在DEPARTMENT表中删除该部门
DECLARE
V_deptno department_id%TYPE :=&p_deptno;
BEGIN
DELETE FROM employees WHERE department_id=v_deptno;
IF SQL%NOTFOUND THEN
DELETE FROM departments WHERE department_id=v_deptno;
END IF;
END;
上一篇: 手机banner图片自适应手机宽高定位