Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Carregando comentários...