Índice
introduzir
Cursor (CURSOR) é um tipo de dados usado para armazenar conjuntos de resultados de consultas. Os cursores podem ser usados em procedimentos armazenados e funções para processar o conjunto de resultados em um loop.
O uso de cursores inclui declaração de cursor, OPEN, FETCH e CLOSE, e sua sintaxe é a seguinte.
Declarar cursor
DECLARE 游标名称 CURSOR FOR 查询语句 ;
Cursor aberto
OPEN 游标名称 ;
Obter registro do cursor
FETCH 游标名称 INTO 变量 [, 变量 ] ;
Fechar cursor
CLOSE 游标名称 ;
Caso
De acordo com o parâmetro de entrada uage, consulte a tabela de usuários tb_user para todos os usuários cuja idade seja menor ou igual ao nome de usuário (nome) e profissão (profissão) de uage e insira o nome e a profissão do usuário em uma nova tabela criada (id, nome, profissão).
-- 逻辑:
-- A. 声明游标, 存储查询结果集
-- B. 准备: 创建表结构
-- C. 开启游标
-- D. 获取游标中的记录
-- E. 插入数据到新表中
-- F. 关闭游标
create procedure p(in uage int)
begin
declare uname varchar(100);
declare upro varchar(100);
declare u_cursor cursor for select name,profession
from tb_user where age <= uage;
drop table if exists tb_user_pro;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(100),
profession varchar(100)
);
open u_cursor;
while true do
fetch u_cursor into uname,upro;
insert into tb_user_pro values (null, uname, upro);
end while;
close u_cursor;
end;
call p(40);
O procedimento armazenado acima eventualmente reportará um erro quando o chamarmos.
Este erro é relatado porque não há condição de saída no loop while acima. Após a obtenção do conjunto de dados do cursor, se os dados forem obtidos novamente, um erro será reportado, encerrando assim a execução do programa.
Mas neste momento, a estrutura da tabela tb_user_pro e seus dados foram inseridos com sucesso.Ao atualizar a estrutura da tabela, podemos ver os dados na estrutura da tabela.
Embora tenhamos implementado as funções acima, a lógica não é perfeita e, após a execução do programa, os dados não podem ser obtidos e o banco de dados reporta um erro. A seguir, precisamos concluir este procedimento armazenado e resolver este problema.
Para resolver este problema, você precisa usar o manipulador de condições Handler fornecido no MySQL. Aprenderemos sobre isso no próximo artigo.
FIM
Aprenda com: Dark Horse Programmer - Curso de banco de dados MySQL