O cursor é um recurso da linguagem T-SQL (Transact SQL - uma especialização da ANSI SQL, própria para o MS SQL Server) muito útil quando é precisa percorrer todo o conjunto de registros de uma query e baseado nesta tomar decisões como: inserir, remover ou atualizar dados em uma tabela, ou até mesmo preencher uma tabela temporaria. Há uma gama de desenvolvedores e DBA que são contra o uso deste recurso. Esses alegam que o uso do cursor sobrecarrega o banco. Eu, particularmente nunca percebi isso. Já realizei alguns testes usando o cursor e não usando e o tempo de resposta foi o mesmo. Talvez por usar pouco não vi diferença. Então é melhor usar somente quando for muito necessário. Abaixo segue um exemplo do uso do cursor para preencher uma tabela temporaria, atualizar, apagar e inserir dados em outras tabelas. Um cursor precisa ser declarado (passando a query que ele irá percorrer) e posteriormente aberto. Como todo ponteiro, inicialmente aponta pro vazio, então após aberto, é preciso usar o comando fetch next passando as variáveis que armazenarão os dados do cursor. A idéia de cursor lembra a de uma recordset. No final do laço while é necessário usar o fetch next novamente para que o cursor se mova para o proximo registro. Para finalizar é necessário fechar o apontador e depois desaloca-lo da memória.
| CREATE TABLE #TEMP_VAL (CODIGO INT, CODIGO VARCHAR(50)) DECLARE @id AS INT, @user AS VARCHAR(50) DECLARE CUR_ADM CURSOR FOR SELECT id, username OPEN CUR_ADM FETCH NEXT FROM CUR_ADM INTOH NEXT FROM CUR_ADM INTO @id, @user WHILE @@FETCH_STATUS = 0 BEGIN IF @user = 'teste'END CLOSE CUR_ADM SELECT * FROM #TEMP_VAL DROP TABLE #TEMP_VAL DEALLOCATE CUR_ADM |
Utilizei no exemplo também uma tabela temporária para armazenar alguns dados e posteriormente apaguei usando o drop. Tabelas temporárias são criadas colocando o # ou ## na frente de seus respectivos nomes. O uso de 1 # ou 2 # é de acordo com a necessidade da aplicação.
Nenhum comentário:
Postar um comentário