Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jothaz

[Resolvido] Simula Array ou Vetor SQL

Recommended Posts

Camaradas,

 

Segue um exemplo completo e comentado de como simular a passagem de um vetor ou array como parâmetro para uma stored procedure.

 

 

CREATE PROCEDURE SIMULA_ARRAY_COMPLETA 	@SCOCPFCNPJ				VARCHAR(8000),	@SCOCLASSIFICACAO		VARCHAR(8000),	@SDEJUSTIFICATIVA		VARCHAR(8000)      /* .... OUTROS PARÂMETROS SE EXISTIREM .... */AS DECLARE	@CPFCNPJ			VARCHAR(14),		@CLASSIFICACAO		CHAR(1),		@JUSTIFICATIVA		VARCHAR(255),		@DELIMITADOR 		VARCHAR(2)	  		--Define que vai ser o delimitador	SET 		@DELIMITADOR = '@|'   	--Inicia a transação 	BEGIN TRAN	 	--CONCATENA O @DELIMITADOR NO FINAL DE DAS VARIÁVEIS LOCAIS 	IF LEN(@SCOCPFCNPJ) > 0 		SET @SCOCPFCNPJ			= @SCOCPFCNPJ + @DELIMITADOR  	IF LEN(@SCOCLASSIFICACAO) > 0 	SET @SCOCLASSIFICACAO	= @SCOCLASSIFICACAO + @DELIMITADOR   	IF LEN(@SDEJUSTIFICATIVA) > 0 	SET @SDEJUSTIFICATIVA	= @SDEJUSTIFICATIVA + @DELIMITADOR   	--INICIA LOOP PARA EXTRAIR SCOCPFCNPJ PARA EFETUAR A ATUALZIAÇÃO	WHILE LEN(RTRIM(LTRIM(@SCOCPFCNPJ))) > 0	BEGIN --LOCALIZA E EXTRAI O CNPJ/CPF, @CLASSIFICACAO E JUSTIFICATIVA			--PARA VARIAVEIS LOCAIS			SELECT @CPFCNPJ			= SUBSTRING(@SCOCPFCNPJ, 1, CHARINDEX(@DELIMITADOR, @SCOCPFCNPJ) - 1)			SELECT @CLASSIFICACAO	= SUBSTRING(@SCOCLASSIFICACAO, 1, CHARINDEX(@DELIMITADOR, @SCOCLASSIFICACAO) - 1)			SELECT @JUSTIFICATIVA	= SUBSTRING(@SDEJUSTIFICATIVA , 1, CHARINDEX(@DELIMITADOR, @SDEJUSTIFICATIVA ) - 1)	  	 			INSERT INTO NOME DA TABELA (					CO_CPF_CNPJ, CO_CLASSIFICACAO, DE_JUSTIFICATIVA) 			VALUES(	@CPFCNPJ, @CLASSIFICACAO, @JUSTIFICATIVA) 	 		--RETIRA LOCALIZA E EXTRAI O CNPJ/CPF, SITUAÇÃO E JUSTIFICATIVA 			SELECT @SCOCPFCNPJ= SUBSTRING(@SCOCPFCNPJ, CHARINDEX(@DELIMITADOR, @SCOCPFCNPJ) + 2, LEN(@SCOCPFCNPJ)) 			SELECT @SCOCLASSIFICACAO= 						SUBSTRING(@SCOCLASSIFICACAO, CHARINDEX(@DELIMITADOR, @SCOCLASSIFICACAO) + 2, LEN(@SCOCLASSIFICACAO)) 			SELECT @SDEJUSTIFICATIVA = 						SUBSTRING(@SDEJUSTIFICATIVA , CHARINDEX(@DELIMITADOR, @SDEJUSTIFICATIVA ) + 2, LEN(@SDEJUSTIFICATIVA )) 	END	--VERIFICA OCORRÊNCIA DE ERROS DURANTE O PROCESSO PARA CONFIRMAR OU NÃO A TRANSAÇÃO 	IF @@ERROR = 0	BEGIN COMMIT TRAN	END	ELSE	BEGIN ROLLBACK TRAN	END
Considerações:

[*]Na camada de apresentação (no ASP por exemplo) pode-se criar os array´s normalmente.

[*]Na chamada da stored procedure os array´s devem ser transformados em string´s delimitadas.

[*]Pode-se utilzar qualquer delimitador normalmente utilizo "@|" pois é um combinação que provavelmente não vai ser utilizada principalmente em campo de descrição e justificativas.

[*]No caso de justificativas deve-se ter o cuidado de dividir o tamanho total do campo varchar na sp (8000) pelo tamanho da justificativa para evitar estouro no tamanho. Exemplo uma justificativa de 255 poderam ser passadas a 31 ocorrências do vetor (8000/255) caso seja necessário passar mais faça um loop na aplicação e passe de 31 em 31.

[*]Para transforma um vetor em string delimitada no ASP pode-se utilizar o comando:

sVar = join(seu_vetor,"@|")
e depois passar o sVar como parâmetro da sp.

Fonte/Autor/link

AUTOR: "Jothaz" inspirado neste tópico.

 

Dúvidas, criticas, contribuições, correções e adições serão bem vindas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.