Eu sei que o cursor não é uma boa ideia, mas tenho algumas dúvidas sobre a estrutura interna do cursor.
O primeiro passo no cursor é determinar o conjunto de resultados sobre o qual o cursor itera. Então, o cursor executou a consulta SELECT e colocou o resultado em alguma tabela temporária ou foi implementado de alguma forma diferente?
O SQL pegará as páginas de dados no disco do formulário de memória, as páginas de dados da primeira vez foram necessárias. Portanto, suponha que eu tenha executado uma consulta SELECT simples manualmente e o SQL puxe as páginas de dados na memória. Suponha também que a consulta SELECT tenha uma consulta idêntica na cláusula FOR. O que aconteceu no final do cursor, quando o cursor é fechado e desalocado? O cursor liberou memória das páginas de dados usadas ou as páginas de dados permaneceram na memória?
Depende do tipo de cursor, conforme documentado em
Concepts: Cursors
:Quanto ao uso da memória, todo o acesso aos dados passa pelo pool de buffers, consulte Arquitetura do gerenciador de memória . Não há 'fechamento' nem 'desalocação' ocorrendo. Os dados são trazidos para a memória conforme necessário, podem ser referenciados por várias consultas e removidos somente quando mais memória livre é necessária.