Salve galera, boa tarde.
Hoje vou postar algo diferente em minhas dicas, mas tenho certeza que muita gente vai gostar.
__________________________________________________________________________________________
Você já ouvi falar de Estruturas de Dados?
• Na Ciência da computação, uma estrutura de dados é um modo particular de armazenamento e organização de dados em um computador. Seu objetivo é possibilitar a utilização deste mesmo dado, de forma eficiente.
• Por exemplo, as B-trees(Árvores binárias) são particularmente indicadas para a implementação de bases de dados, devido a sua forma de ordenação e armazenamento dos dados, considerada de grande eficiência durante os processos de busca e pesquisa de informações.
• As Estruturas de dados são consideradas temas fundamentais na ciência da computação, sendo utilizadas nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de aplicação.
• Quando estes dados estão organizados (dispostos) de forma coerente, caracterizam uma forma, denominada estrutura de dados.
• A organização e os métodos para manipular essa estrutura é que lhe conferem singularidade, específicos para cada estrutruda de dados, bem como, os tipos de dados armazenados nesta estrutura.
um número fixo de números inteiros. A matriz pode ser definida como uma coleção de variáveis de mesmo tipo, acessíveis com um único nome e armazenados contiguamente na memória.
- dbo.Numeracao –> Tabela auxiliar responsável em armazenar uma sequência de números inteiros;
- dbo.Arrays –> Tabela principal, utilizada para armazenar os elementos que compõem no Array.
A Listagem 1 apresentada a abaixo, ilustra o código de criação e população de dados para as tabelas dbo.Numeracao e dbo.Arrays,
— Listagem 1 – Criando as tabelas dbo.Numeracao e dbo.Arrays —
Use TEMPDB;
Go
If OBJECT_ID(‘dbo.Numeracao’,’U’) Is Not Null
Drop Table dbo.Numeracao;
— Criação da tabela dbo.Numeracao —
Create Table dbo.Numeracao
(Numero Int Not Null Primary Key) ;
Go
Declare @ValorMaximo Int,
@Contador Int;
Set @ValorMaximo=1000000;
Set @Contador=1;
Insert Into dbo.Numeracao Values(1)
— Loop de inserção de dados —
While @Contador * 2 <= @ValorMaximo
Begin
Insert Into dbo.Numeracao
Select Numero+@Contador from dbo.Numeracao;
Set @Contador *= 2;
End
— Inserção de dados complementares da tabela dbo.Numeracao —
Insert Into dbo.Numeracao
Select Numero + @Contador from dbo.Numeracao
Where Numero + @Contador <= @ValorMaximo
Go
IF OBJECT_ID(‘dbo.Arrays’) Is Not Null
Drop Table dbo.Arrays;
— Criando a tabela dbo.Arrays —
Create Table dbo.Arrays
(Idx Varchar(10) Not Null Primary Key,
Elementos Varchar(8000) Not Null)
Go
— Inserção de dados na tabela dbo.Arrays —
Insert Into Arrays(Idx, Elementos)
Values
(‘A’,‘20,223,2544,25567,14’),
(‘B’,’30,-23433,28′),
(‘C’,‘12,10,8099,12,1200,13,12,14,10,9’),
(‘D’,‘-4,-6,-45678,-2’)
GO
Nossas tabelas foram criadas e seus respectivos dados armazenados em suas estruturas, vale ressaltar que a tabela dbo.Numeracao possui uma massa de 1 milhão de linhas de registros. Para confirmar podemos observar a Figura 1, apresentada a seguir:
Figura 1 – Dados armazenados nas tabelas dbo.Numeracao e dbo.Arrays.
Agora com nosso ambiente pronto e abastecido de informações, o próximo passo é montar o Array, tarefa que será dividida em algumas fases.
A Listagem 2, apresenta a Primeira Fase para construção do nosso Array, onde inicialmente vamos realizar um Select fazendo a junção entre a tabela dbo.Numeracao e dbo.Array. O objetivo deste select é obter o Número armazenado na tabela dbo.Numeracao correspondente ao tamanho dos elementos envolvidos em cada linha da tabela dbo.Arrays.
Neste código utilizo a função DataLength(): Retorna o número de bytes usado para representar qualquer expressão, outro detalhe importante esta relacionado com a função SubString(): Retorna parte de uma expressão de caractere, binária, de texto ou de imagem, através desta função, vamos retornar a vírgula utilizada como separador de caracteres armazenados na coluna Elementos existente na tabela Arrays.
— Listagem 2 – Primeira fase para construção do Array —
Select A.Idx, A.Elementos,
N.Numero
from dbo.Arrays A Join dbo.Numeracao N
On N.Numero <= DATALENGTH(A.Elementos)
And SUBSTRING(Elementos, Numero, 1) = ‘,’
Após executarmos a Listagem 2, temos o seguinte resultado, conforme apresenta a Figura 2:
Figura 2 — Resultado da execução da Listagem 2.
Vamos para o próximo passo, evoluir nossa estrutura o mais próximo de um Array, neste caso, transformar nosso elementos que estão agrupados em uma única linha correspondente ao linha registro em linhas separadas, para isso, vou utilizar neste segunda fase da função CharIndex: Utilizada para pesquisar valores em declarados em uma expressão que possam existir na expressão de origem, retornando a posição desta expressão.
Pois bem, vamos utilizar então a CharIndex para pesquisar dentro da coluna Elementos, a vírgula utilizada como separador de caracteres, com isso, teremos a posição de cada vírgula existente entre os valores declarados. Esta linha de código será o ponto chave para a montar do nosso Array, conforme a Listagem 3 apresentada a seguir, bem como, a Figura 4 que ilustra nosso Array.
Select
A.Idx,
Substring(A.Elementos, N.Numero,
CHARINDEX(‘,’, A.Elementos + ‘,’, N.Numero)-N.Numero) As Elementos
from
dbo.Arrays A Join dbo.Numeracao N
On N.Numero <= DATALENGTH(A.Elementos) + 1
And SUBSTRING(‘,’ + A.Elementos, Numero, 1) = ‘,’
— Listagem 3 – Segunda fase para construção do Array —
Select A.Idx,
Substring(A.Elementos, N.Numero, CHARINDEX(‘,’, A.Elementos + ‘,’, N.Numero)-N.Numero) As Elementos
from dbo.Arrays A Join dbo.Numeracao N
On N.Numero <= DATALENGTH(A.Elementos) + 1
And SUBSTRING(‘,’ + A.Elementos, Numero, 1) = ‘,’
Figura 3 – Elementos separados através da utilização da função SubString em conjunto com a função CharIndex.
Então os elementos foram separados, nosso Array esta quase pronto, o que falta agora é estabelecer a posição de cada elemento, o que representa a fase final da construção do nosso Array, conforme apresenta a Listagem 4 e demonstrado na Figura 4.
— Listagem 4 — Fase Final – Construção do Array —
Create Table dbo.ArrayCompleto
(Idx Int Identity Primary Key,
Identificador Char(1) Not Null,
Elementos Varchar(10))
Go
— Inserindo os dados na Tabela ArrayCompleto —
Insert Into ArrayCompleto(Identificador, Elementos)
Select A.Idx,
Substring(A.Elementos, N.Numero, CHARINDEX(‘,’, A.Elementos + ‘,’, N.Numero)-N.Numero) As Elementos
from dbo.Arrays A Join dbo.Numeracao N
On N.Numero <= DATALENGTH(A.Elementos) + 1
And SUBSTRING(‘,’ + A.Elementos, Numero, 1) = ‘,’
Go;
Figura 4 – Estrutura Completa do Array.
Com base no resultado apresentado na Figura 4, temos a comprovação que nosso Array esta pronto, nossa estrutura criada anteriormente contendo os elementos agrupados por Identficadores foram distribuídos em cada linha, nossa sua estrutura de Array esta completa, contendo a coluna Índice, a coluna Identificador que representava um campo de identifação dos Elementos e a coluna Elementos com cada valor disposto em linhas distintas.
Sendo assim, acredito que esta dica se encerra aqui, nosso Array esta montando e pronto para ser utilizado!!!
Espero que você tenha gostado e entendido como podemos construir um simples Array no SQL Server, fazendo uso de funções Strings, separadores de caracteres e decomposição de elementos.
Agradeço a sua visita, nos encontramos nos próximos artigos.
Até mais.
Excelente artigo Galvão, parabéns!
Abraços.
CurtirCurtir
Balbo, boa noite.
Cara muito obrigado, estou procurando me atualizar dentro do possível, estudando mais sobre o SQL Server 2008, inclusive comprei mais dois livros e estão me ajudando bastante.
Agradeço a sua visita.
CurtirCurtir
Muito bom Galvão, excelente! Semestre que vem também vou me focar nos estudos (mais do que agora), pra tirar certificações MS e melhorar meus conhecimentos.
Abraços cara.
CurtirCurtir