PLSQL游标(含带参数)

declare
   -- 创建一个游标
  cursor emps is select * from emp;
  -- 声明一个变量记录数据
  em emp%rowtype;
  begin
    -- 打开游标
    open emps;
    --循环读取数据
    loop
      fetch emps into em;
      -- 当 游标为空时退出循环
      exit when emps%notfound;
      -- 输出数据
      dbms_output.put_line('姓名:'||+em.ename||'工资:'|| em.sal);
    end loop;
    -- 关闭游标
     close emps;
   end;
  -------------------------------------------------------------------------------------------------------------------------------------------------------
 declare
  -- 创建带参数的游标
  cursor emps(dno number) is select * from emp where deptno=dno;
   em emp%rowtype;
   begin
     -- 打开游标时传参数
     open emps(10);
     loop
       fetch emps into em;
       exit when emps%notfound;
       dbms_output.put_line('姓名'||em.ename||'工资'||em.sal||'部门编号'||em.deptno);
     end loop;
     close emps;
   end;
   -- -系统引用游标
 declare
 -- 声明系统引用游标
   emps sys_refcursor;
   em emp%rowtype;
  begin
    --打开游标
    open emps for select * from emp;
    -- 遍历
   loop
     fetch emps into em;
     exit when emps%notfound;
     dbms_output.put_line('姓名'||em.ename||'工资'||em.sal||'部门编号'||em.deptno);
    end loop;
  end;
   
    --按照员工工作给所有员工涨工资,总裁涨1000,经理涨800,其他人涨400
 declare
  cursor emps is select * from emp;
  em emp%rowtype;
  begin
    open emps;
    loop
      fetch emps into em;
      exit when emps%notfound;
      if em.job='PRESIDENT' then
           update emp set sal=sal+1000 where empno=em.empno;
           d
      elsif em.job='MANAGER' then
         update emp set sal=sal+800 where empno=em.empno;
       else
         update emp set sal=sal+400 where empno=em.empno;    
        end if;
    end loop;
    close emps;
    commit;
  end;

猜你喜欢

转载自blog.csdn.net/weixin_41167150/article/details/80773366