zoukankan      html  css  js  c++  java
  • oracle光标的使用

    以下plsql程序用的scott用户的dept,emp表。

    1.光标的使用:

     1 --查询并打印员工的姓名名和薪水
     2 /*
     3 光标属性:
     4   %found  %notfound
     5 
     6 */
     7 
     8 set serveroutput on;
     9 
    10 declare
    11 
    12   CURSOR C1 IS SELECT ENAME,SAL FROM EMP;
    13   PENAME EMP.ENAME%TYPE;
    14   PSAL EMP.SAL%TYPE;
    15  
    16 BEGIN
    17 
    18   --打开光标
    19   OPEN C1;  
    20  
    21   LOOP
    22    
    23     --取一条记录,
    24     FETCH C1 INTO PENAME,PSAL ;
    25     EXIT WHEN C1%notfound;
    26     --1.循环什么时候退出  2.FETCH一定能取到数据吗
    27     DBMS_OUTPUT.PUT_LINE(PENAME||'的薪水是'||PSAL);
    28   END LOOP;
    29  
    30   --关闭光标
    31   CLOSE C1;
    32 
    33 END;
    34 /

    2.给员工涨工资

     1 --给员工涨工资, 总裁涨1000 ,经理涨800 ,其他 400
     2 
     3 set serveroutput on;
     4 
     5 declare
     6 
     7   cursor cemp is select empno,job from emp;
     8   pempno emp.empno%type;
     9   pjob emp.job%type;
    10  
    11  
    12 begin
    13  
    14   open cemp;
    15   loop
    16  
    17     fetch cemp into pempno,pjob ;
    18     exit when cemp%notfound;
    19    
    20     IF pjob = 'PRESIDENT' then  update emp set sal= sal + 1000 where empno = pempno;
    21     ELSIF pjob = 'MANAGER' then  update emp set sal=sal+800 where empno = pempno;
    22     ELSE update emp set sal=sal + 400 where  empno = pempno;
    23     END IF;
    24    
    25   end loop;
    26  
    27   close cemp;
    28 
    29   commit;
    30  --对应oracle ,默认的事务隔离级别是 read committed
    31  --事务的ACID :原子性 一致性 隔离性 持久性
    32   SYS.DBMS_OUTPUT.PUT_LINE('涨工资完成');
    33  
    34  
    35 
    36 end;
    37 
    38 /

    3.操作带参数的光标

     1 --查询某个部门中员工的姓名
     2 
     3 set serveroutput on;
     4 
     5 declare
     6 
     7   cursor cemp(dno number) is select ename from emp where deptno = dno;
     8   pename emp.ename%type;
     9  
    10 begin
    11   open cemp(10);
    12   dbms_output.put_line('10号部门的人有:');
    13   loop
    14    
    15     fetch cemp into pename;
    16     exit when cemp%notfound;
    17     dbms_output.put_line(pename);
    18  
    19   end loop;
    20  
    21  
    22  
    23   close cemp;
    24 
    25 end;
    26 
    27 /

    知识点出处: http://www.imooc.com/learn/360

  • 相关阅读:
    Javascript中Promise对象的实现
    SQL 问题记录
    转:十步完全理解SQL
    转:SQL Server 动态行转列
    SQL in、not in、exists和not exists的区别:
    SQL之left join、right join、inner join的区别
    转 .NET4.5之初识async与await
    macOS USB连接iPhone反复重连解决方法
    MacOS: 找到被占用的端口并释放
    解决rust编译包含diesel类库时,cannot find -lmysqlclient的错误
  • 原文地址:https://www.cnblogs.com/xxyfhjl/p/6415765.html
Copyright © 2011-2022 走看看