第 15 章 · 第十节
一行行地处理结果集
SQL 一次给你一整张表,游标一次给你一行。

重 点
游标只能写在存储过程和函数里,单独拿出来用不了。
知道更多
这一节按课件的说法是浅学,知道四步怎么走、慢在哪儿就够了。
想一想
什么样的活儿非得一行行做不可?
SQL 一次给你一整张表,游标一次给你一行。

游标只能写在存储过程和函数里,单独拿出来用不了。
这一节按课件的说法是浅学,知道四步怎么走、慢在哪儿就够了。
什么样的活儿非得一行行做不可?
打开、取一行、指针往下挪、再取。

| 指针 | sno | sn |
|---|
一桌菜端上来是普通查询,一筷子一筷子夹给你是游标。
声明的时候查询并不执行。

声明只是给这句 SELECT 起个名字,服务器内存里还没有结果集。
声明的顺序是硬的:先变量,再游标,最后处理程序,换位置报 1064。
声明的时候不执行,那什么时候才执行?
结果集摆进内存,指针停在第一行前面。

OPEN 之后结果集就定下来了,后面别人改表也不影响你手上这一份。
没打开就 FETCH 报 1326,这个错在写长过程的时候最容易出。
打开了忘记关会怎么样?
每次取一行,指针自动往下挪一格。

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

| 本来的麻烦 | 这一章给的办法 |
|---|
游标比直接一句 SQL 慢得多,能用一句查询做完的事就别用它。
下一章讲触发器,它跟存储过程像在哪儿?