Cursores têm como maior trunfo o desempenho em relação à outras formas de
processamento de grande volume de dados. Neste artigo
abordaremos de maneira sucinta e prática o uso de cursores na linguagem de
programação PL/SQL do Oracle Database. Serão abordados os tipos de cursores
implícitos, explícitos e bulk collect.
Também serão abordados cursores de referência, em que os dados armazenados no
cursor são passados para o retorno de um método e pode ser lido ou obtido por
programas feitos em outras linguagens de programação ou por outro método no
próprio PL/SQL.
Com o exponencial aumento no volume de dados, em grandes empresas ou instituições que proveem vários tipos de serviços ou disponibilizam vários tipos de produtos, se faz necessário sistemas em que requisitos como desempenho, disponibilidade e adaptação se tornem fatores primordiais. É onde se encaixam linguagens de programação como PL/SQL (Procedural Language Structure Query Language).
O PL/SQL nada mais é que uma extensão da linguagem SQL do SGBD Oracle Database, da mesma forma que existem linguagens similares para outros SGBDs como o TransactSQL do Microsoft SQL Server e o SQL PL do IBM DB2.
Em 1991 foi lançada a versão 1.0 do PL/SQL junto com a versão 6.0 do Oracle Database, que a partir da versão 8.0 do Oracle Database passou a acompanhar o Database passando a ser PL/SQL 8.0 e foi evoluindo até chegar na versão mais recente que é a 12c. No decorrer de mais de duas décadas se tornou uma linguagem de programação muito poderosa e madura.
A grande vantagem do uso do PL/SQL é o desempenho, pois permite que o código seja aplicado mais próximo aos dados simplificando o desenvolvimento. Isso otimiza a execução, melhora a utilização dos recursos do servidor e possivelmente diminui o tráfego de dados na rede.
Neste artigo, iremos tratar uma parte importante da linguagem PL/SQL que são os cursores e bulk collect, que nada mais são que matrizes de dados que armazenam os resultados de comandos select sendo comparado a um recordset.
Resumindo, são formas aprimoradas de utilização do SQL na PL/SQL. É uma alternativa ao uso de variáveis, pois, com os cursores ou bulk collect não se faz necessária a declaração de muitas variáveis e a execução de várias queries e loops; toda essa informação será armazenada no próprio cursor ou na coleção.
O primeiro tipo de cursor que vamos falar é o cursor implícito, que conceitualmente não é declarado no método e tudo é feito no corpo do método. É possível tratar o cursor linha a linha, mas não é possível ter os controles de abrir (OPEN), mover (FETCH) e fechar (CLOSE). Apesar disso, ele possui uma sintaxe mais limpa e em alguns casos o programa fica mais organizado.
O segundo tipo é o cursor explícito, que por definição deve ser declarado junto com as variáveis do método no bloco DECLARE, com isso é alocado um espaço em memória para o cursor. É possível ter todo o controle do cursor através de métodos como abrir, mover e fechar.
O Bulk collect tem basicamente o mesmo conceito de um cursor, porém, com a vantagem de ser tratado como um array de dados, podendo ser manipulado dentro de um loop simples.
Por último, temos os cursores de referência, também chamados de variáveis de cursor, que são tipos de dados PL/SQL e por isso podem ser passados como retorno de um método, podendo ser aproveitado ou reaproveitado por diversos outros métodos ou mesmo ser executado como uma query normal em outras linguagens de programação como Java, .NET, Delphi e etc., proporcionando alta escalabilidade e flexibilidade.
Uma grande vantagem deste tipo é que as queries ficam compiladas no banco de dados, não fazendo necessário os passos de validação da mesma pelo SGBD, ganhando assim em desempenho e tempo de processamento.
Neste artigo, depois de conceituar em mais detalhes cada tipo citado acima, iremos também demonstrar seu uso através exemplos. Para auxiliar os exemplos, será criada uma tabela.
O primeiro exemplo de cursor
será um cursor implícito que irá processar ...