Como usar cursores aninhados

Escrito por leena kudalkar | Traduzido por yaakov ben levy
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
Como usar cursores aninhados
Os cursores são usados quando cada linha em um conjunto de cursores precisa ser processada (searching image by dinostock from Fotolia.com)

Cursores são estruturas providas nas versões programáveis do Structured Query Language (SQL), como o Sybase ou o Microsoft SQL Server's Transact-SQL. Você irá definir um cursor quando precisar selecionar ou atualizar uma ou mais tabelas do SQL. O cursor possui um nome que poderá ser usado para referir-se a ele, abrir e fechar ou buscar linhas de seu conjunto. É usado quando cada linha de um conjunto deve ser processada ou utilizada em variáveis de um programa. Quando um novo cursor é declarado em um ciclo que processa linha por linha de cursor, todo o novo cursor é aninhado ao anterior.

Nível de dificuldade:
Moderado

Outras pessoas estão lendo

Instruções

  1. 1

    Declare um cursor para uma seleção simples fazendo uso da sintaxe T-SQL:

    DECLARE <nome-cursor> CURSOR FOR SELECT field1, field2, field3 FROM <nome-tabela> WHERE field4 <= @limitval

  2. 2

    Abra o cursor para ser processado usando esta sintaxe T-SQL: OPEN <nome-cursor>

  3. 3

    Busque as linhas a partir do cursor aberto para ser processado, desde que ele seja um cursor de leitura (seleção). Declare as variáveis necessárias para guardar os valores dos campos na linha do cursor atual. O sintaxe T-SQL para busca das linhas do cursor é este:

    FETCH NEXT FROM <nome-cursor> INTO @var_fld1, @var_fld2, @var_fld3 while @@fetch_status == 0 begin

    --- < coloque aqui o processo da linha atual do cursor >

    FETCH NEXT FROM <nome-cursor> INTO @var_fld1, @var_fld2, @var_fld3

    end

  4. 4

    Acrescente a declaração e execução do segundo cursor do ciclo de busca do cursor anterior:

    -- ciclo de busca do cursor anterior while @@fetch_status == 0 begin

    < coloque aqui o processo da linha atual do cursor anterior >

    -- Hora de declarar o segundo cursor - começo do aninhamento DECLARE segundo_cursor CURSOR FOR SELECT X, Y, Z,.... FROM table1, table2, ... WHERE <condição>

    OPEN segundo_cursor FETCH NEXT FROM segundo_cursor INTO @varX, @varY, @varZ...

    while @@fetch_status == 0 begin -- inner cursor fetch loop

    -- < coloque aqui o processo da linha atual do segundo_cursor > -- get next row FETCH NEXT FROM segundo_cursor INTO @varX, @varY, @varZ...

    end -- Ciclo de busca do segundo cursor

    end -- Ciclo de busca do cursor anterior

Dicas & Advertências

  • É recomendada a implementação de cursores aninhados (internos) apenas quando necessário. Tais cursores são bem dinâmicos, pesados e desgastantes para o servidor SQL processar. Evite o uso de várias tabelas temporárias ou inserções de confirmações enquanto usar cursores aninhados (internos). Use funções e procedimentos de armazenamento para passar parâmetros e compartilhar dados quando possível, para poder eliminar a necessidade do uso de cursores.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível