当前位置:数据库 > SQLServer >>

plsql中游标的应用

plsql中游标的应用
 
游标:cursor
declare 
        cursor c is  --声明一个游标
                select * from emp;
        v_emp c%rowtype;
begin
            open c;--打开游标
            fetch c into v_emp; --拿出这条记录,存到v_emp,拿出后,游标自动向后移
            dbms_output.put_line(v_emp.ename);
            close c; --自动清除内存
end;
 
循环和游标一起使用:
declare
        cursor c is
            select * from emp;
        v_emp c%rowtype;
begin
    open c;
    loop  --注意这三条不能变换顺序
        fetch c into v_emp;
        exit when (c%notfound);
        dbms_output.put_line(v_emp.ename);
    end loop;
    close c;
end;
 
while()循环与游标的使用:
declare
        cursor c is
            select * from emp;
        v_emp emp%rowtype;
begin
         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;
end;
        for()循环,    是最简单的循环,最常用;
declare 
        cursor c is
             select * from emp;
begin
        for v_emp in c 
        loop
            dbms_output.put_line(v_emp.ename);
        end loop;
end;
 
带参数的游标:
declare  
            --这儿是形参
        cursor c(v_deptno  emp.deptno%type,v_job emp.job%type)
        is 
            select ename ,sal from emp where deptno  =v_deptno and job=v_job;
            --v_temp c%rowtype;
begin
 
        for v_temp in c(30,'CLERK')
        loop
            dbms_output.put_line(v_temp.ename);
        end loop;
end;
    可更新的游标:
 
declare 
            cursor c 
            is
                select * from emp2 for update;
                --v_temp c%rowtype;
        begin
        for v_temp in c 
        loop
            if(v_temp.sal < 2000) then
                update emp2 set sal = sal*2 where current of c;
            elsif(v_temp.sal = 5000) then
                delete from emp2 where current of c;
            end if;
            end loop;
        commit;
end;
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,