PL/SQL 显式游标

-- Start

显式游标又叫命名游标,就是通常我们说的游标。

CREATE TABLE Student(
    Id      INT             NOT NULL,
    Name    VARCHAR2(30)    NOT NULL,
    Class   VARCHAR2(10)
);
INSERT INTO Student VALUES (1, '张三', '116班');
INSERT INTO Student VALUES (2, '李四', '117班');
INSERT INTO Student VALUES (3, '王五', '118班');

DECLARE
  -- 声明游标
  CURSOR c1 RETURN Student%ROWTYPE;
  
  -- 定义游标
  CURSOR c1 RETURN Student%ROWTYPE IS
  SELECT * FROM Student;
  
  --声明并定义游标
  CURSOR c2 IS SELECT Id, Name FROM Student;
  
  -- 带参数的游标
  CURSOR c3 (ClassName VARCHAR2) IS 
  SELECT * FROM Student WHERE Class = ClassName;

  -- 根据游标定义记录变量
  StudentRec  c1%ROWTYPE;
BEGIN
  -- c2%ISOPEN 检查游标是否是打开状态
  IF c2%ISOPEN THEN  
    DBMS_OUTPUT.PUT_LINE('c2 游标没有打开.');  
  END IF;

  -- 打开游标 
  OPEN c1;
  
    LOOP
      FETCH c1 INTO StudentRec;
      EXIT WHEN c1%NOTFOUND; --检查是否没有找到,c1%FOUND 检查是否找到
      DBMS_OUTPUT.PUT_LINE('得到 ' || TO_CHAR(c1%ROWCOUNT) || ' 行.');
      DBMS_OUTPUT.PUT_LINE('学号: ' || StudentRec.Id || ', 姓名: ' || StudentRec.Name);
    END LOOP;
    
  -- 关闭游标
  CLOSE c1;
  
  -- 利用 FOR 迭代游标
  FOR item IN c1
  LOOP
    DBMS_OUTPUT.PUT_LINE('学号: ' || item.Id || ', 姓名: ' || item.Name);
  END LOOP;
  
  -- 利用 FOR 迭代游标
  FOR item IN c3('116班')
  LOOP
    DBMS_OUTPUT.PUT_LINE('学号: ' || item.Id || ', 姓名: ' || item.Name);
  END LOOP;
END;
/

--更多参见:Oracle PL/SQL 精萃

-- 声明:转载请注明出处

-- Last Edited on 2015-01-12

-- Created by ShangBo on 2015-01-11

-- End


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值