数据库原理与应用 第 15 章 · 第十节
课程第 15 章第十节 第十节游标是什么声明游标打开游标取数据关游标 版式
第 15 章 存储过程与函数 · 第十节

游标的使用

本 节 知 识 点
  1. 81一行行地处理结果集
  2. 82指向结果集某一行的一个指针
  3. 83DECLARE 游标名 CURSOR FOR 查询
  4. 84OPEN,查询这时才真的跑
  5. 85FETCH 游标名 INTO 变量
  6. 86CLOSE,把内存还回去
81
第 15 章 · 第十节

一行行地处理结果集

SQL 一次给你一整张表,游标一次给你一行。

第 81 页课件

重 点

游标只能写在存储过程和函数里,单独拿出来用不了。

知道更多

这一节按课件的说法是浅学,知道四步怎么走、慢在哪儿就够了。

想一想

什么样的活儿非得一行行做不可?

82
第 15 章 · 第十节

指向结果集某一行的一个指针

打开、取一行、指针往下挪、再取。

第 82 页课件

试一试四步走一遍,看指针怎么挪

SELECT sno, sn FROM s
指针snosn
vsno = (还没取)  vsn = (还没取)

关键术语

游标cursor
从结果集中逐条访问记录的一种机制
游标指针pointer
指向结果集中某一行的位置标记

打个比方

一桌菜端上来是普通查询,一筷子一筷子夹给你是游标。

83
第 15 章 · 第十节

DECLARE 游标名 CURSOR FOR 查询

声明的时候查询并不执行。

第 83 页课件

重 点

声明只是给这句 SELECT 起个名字,服务器内存里还没有结果集。

知道更多

声明的顺序是硬的:先变量,再游标,最后处理程序,换位置报 1064。

上机做

上机五第 5 题 四步走一遍

想一想

声明的时候不执行,那什么时候才执行?

84
第 15 章 · 第十节

OPEN,查询这时才真的跑

结果集摆进内存,指针停在第一行前面。

第 84 页课件

重 点

OPEN 之后结果集就定下来了,后面别人改表也不影响你手上这一份。

知道更多

没打开就 FETCH 报 1326,这个错在写长过程的时候最容易出。

想一想

打开了忘记关会怎么样?

85
第 15 章 · 第十节

FETCH 游标名 INTO 变量

每次取一行,指针自动往下挪一格。

第 85 页课件

重 点

变量个数要跟游标那句 SELECT 的列数一样,不一样报 1328。

知道更多

取到底还接着取就报 1329,所以要写一个 NOT FOUND 处理程序接住它。

上机做

上机五第 6 题 取到底试试

86
第 15 章 · 第十节

CLOSE,把内存还回去

四步走完,一份成绩单就一行行算出来了。

第 86 页课件

试一试这一章各解决了什么

点一行,看这一章的东西各自解决了什么
本来的麻烦这一章给的办法

重 点

游标比直接一句 SQL 慢得多,能用一句查询做完的事就别用它。

记牢它游标四步

  1. DECLARE 声明
  2. OPEN 打开
  3. FETCH 取一行
  4. CLOSE 关掉

想一想

下一章讲触发器,它跟存储过程像在哪儿?

保山学院·人工智能教研室·曹鼎鼎