
游标的使用方法和效率
- 重点:游标对于大数据量是低效率的
- 重点:
- 1、 游标的属性
- 2、 Current of cursor 游标的当前记录
- 1. 游标:游标是select之后的结果集。我们可以借助游标将结果集每一条赋值到结果集中,
- 然后对数据进行逐条控制
- 2. 游标的属性解析
- 2.1. %FOUND : 布尔型的判断,有数据可取为true,没有则为false
- 2.2. %NOTFOUND:与found正好相反
- 2.3. %ISOPEN:判断是否已经打开游标
- 2.4. ROWCOUNT:判断游标内的数据有多少条
- 1、游标应用的案例
- declare
- cursor mycur is select * from dept; --定义游标
- myrec dept%rowtype; --定义复合变量
- begin
- open mycur; --打开游标,拿出来
- fetch mycur into myrec; --将游标赋值给变量
- while mycur%found loop --用游标的%found属性返回布尔值判断做循环输出
- dbms_output.put_line('myrec.did'||myrec.did);
- dbms_output.put_line('myrec.dname'||myrec.dname);
- fetch mycur into myrec; --循环体内输出
- end loop;
- end;
- /
- 2、游标传参的案例
- declare
- cursor mycur(id varchar2) is --定义游标
- select dname from dept where did=id; --这里的ID应用的是游标里面定义的ID
- name dept.dname%type; --定义存储结果的变量
- begin
- open mycur('01'); --打开游标,相当于把参数传递进去了
- fetch mycur into name; --将游标的值赋给变量
- dbms_output.put_line(name);
- if mycur%isopen then --游标的属性isopen的应用
- dbms_output.put_line('游标已经打开');
- end if;
- end;
- /
- 3、current of mycur的应用,判断到游标所在的当前行。并且用游标更新数据
- declare
- cursor mycur is
- select dname from dept for update; --这里加上for update是锁定用来更新数据的游标。
- name dept.dname%type;
- begin
- open mycur;
- fetch mycur into name;
- while mycur%found loop --条件 while loop
- dbms_output.put_line('aaa');
- update dept set dname='部门aa' where CURRENT of mycur;
- --关键所在,运用了current of mycur做where条件意思是说。判断游标所在的当前行
- fetch mycur into name;
- end loop;
- close mycur;
- end;
- /
- 重:隐士游标不需要声明不需要打开和关闭
- 隐士游标的案例:
- begin
- for cur in(select dname from dept) loop
- dbms_output.put_line(cur.dname);
- end loop;
- end;
- /
============ 欢迎各位老板打赏~ ===========


与本文相关的文章
- · mysql创建用户并赋予权限
- · docker定时任务Mysql脚本
- · docker安装mysql8注意事项
- · 定时备份docker中的mysql
- · docker-compose通过容器名连接mysql
- · unity3d mysql error: The given key was not present in the dictionary.
- · mysql服务性能优化—my.cnf配置说明详解(不同内存)
- · MySQL 批量修改数据表编码及字符集
- · Your database must use ‘READ-COMMITTED’ as the default isolation level.
- · MySQL-InnoDB存储引擎
- · 将数据从mysql迁移到clickhouse
- · docker安装Mysql5.7
hehe~~