Karuta’s ASP & M$ SQLserver

Dicas, códigos e outras coisinhas de meus estudos para não esquecer…

simular a passagem de um vetor ou array como parâmetro para uma stored procedure

Posted by karuta em janeiro 26, 2010

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


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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: