none
DECLARE CURSOR INSERT com condição IF RRS feed

  • Pergunta

  • Boa tarde a Todos.

    Tenho uma consulta onde faz inserção de ocorrência para alunos e nesta irei inserir 6 tipos de ocorrências com nomes já definidos no campo, mas o ID auto-incremento é o dado que sempre será diferente para não ocorrer duplicidade.

    Esta mesma será um job que ficara rodando de tempos em tempos, e preciso que esta consulta não fique repetindo dados, apenas inserir dados que não existem ainda. Os unicos campos que poderemos tratar para impedir que o sistema duplique será a DATA, O RA(matricula do aluno) ou a própria OCORRENCIA, já que a mesma irá fazer inserts de textos fixos e disparar para o aplicativo do aluno.

    SELECT CODCOLIGADA, IDOCORALUNO, 
    RA, DATAOCORRENCIA, OBSERVACOES
    FROM 
    	SOCORRENCIAALUNO 
    WHERE 
    	DATAOCORRENCIA = '2018-04-26'

    Pelo IDOCORALUNO não terá com fazer a condição de insert pois o mesmo gera sempre ID diferente e não tem como fazer comparação com os que já tem cadastrados.

    Para ficar melhor um exemplo básico.

    O select INTO q tenho gera 10 dados e os insere.

    Passa 10min o sistema irá gerar 11 dados  porém 10 repetidos com os que já estão inseridos, mas o inserte tem que reconhecer e aprovar este insert 1 e ignorar os outros 10.


    CharlesTI.


    • Editado CHARLES.PTU quinta-feira, 26 de abril de 2018 21:00
    quinta-feira, 26 de abril de 2018 20:54

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta CHARLES.PTU quinta-feira, 26 de abril de 2018 23:20
    quinta-feira, 26 de abril de 2018 21:14
  • Boa noite José Diz.

    Então... o RA é unico. O que falo que irá repetir é apenas o RA, data do dia e a OBSERVAÇÃO. Estarei enviando alguns dados de insert.

    INSERT INTO dbo.SOCORRENCIAALUNO (CODCOLIGADA, IDOCORALUNO, RA, CODOCORRENCIAGRUPO, CODOCORRENCIATIPO, IDPERLET, DATAOCORRENCIA, OBSERVACOES, DISPONIVELWEB, RECCREATEDBY, RECCREATEDON, RECMODIFIEDBY, RECMODIFIEDON, RESPONSAVELCIENTE)
    VALUES (1, 672868, '118001908', '11', '144', 27, '2018-04-26 18:47:21.76', '1 - O ALUNO FALTOU AO COLEGIO ', '1', 'mestre', '2018-04-26 18:47:21.76', 'mestre', '2018-04-26 18:47:21.76', 'N')
    GO
    
    INSERT INTO dbo.SOCORRENCIAALUNO (CODCOLIGADA, IDOCORALUNO, RA, CODOCORRENCIAGRUPO, CODOCORRENCIATIPO, IDPERLET, DATAOCORRENCIA, OBSERVACOES, DISPONIVELWEB, RECCREATEDBY, RECCREATEDON, RECMODIFIEDBY, RECMODIFIEDON, RESPONSAVELCIENTE)
    VALUES (1, 672869, '118001912', '11', '144', 27, '2018-04-26 18:47:21.76', '1 - O ALUNO FALTOU AO COLEGIO ', '1', 'mestre', '2018-04-26 18:47:21.76', 'mestre', '2018-04-26 18:47:21.76', 'N')
    GO
    
    INSERT INTO dbo.SOCORRENCIAALUNO (CODCOLIGADA, IDOCORALUNO, RA, CODOCORRENCIAGRUPO, CODOCORRENCIATIPO, IDPERLET, DATAOCORRENCIA, OBSERVACOES, DISPONIVELWEB, RECCREATEDBY, RECCREATEDON, RECMODIFIEDBY, RECMODIFIEDON, RESPONSAVELCIENTE)
    VALUES (1, 672870, '118001931', '11', '144', 27, '2018-04-26 18:47:21.76', '1 - O ALUNO FALTOU AO COLEGIO ', '1', 'mestre', '2018-04-26 18:47:21.76', 'mestre', '2018-04-26 18:47:21.76', 'N')
    GO
    



    CharlesTI.

    quinta-feira, 26 de abril de 2018 21:51
  • A consulta que gero um SELECT INTO tem quase 400 linhas, então achei melhor trazer apenas alguns dados padrões para tentar resolver o problema. Mas a mesma está funcional, só preciso ver o caso dos insert que o sistema ficará fazendo e de como arrumar um jeito para bloquear os dados repetidos.

    CharlesTI.

    quinta-feira, 26 de abril de 2018 21:54
  • O conteúdo de IDOCORALUNO é gerado no momento de incluir linha na tabela SOCORRENCIAALUNO ou é gerado em momento anterior? Isto é, quando da execução do segundo INSERT, os valores de IDOCORALUNO das 10 linhas repetidas são os mesmos que foram incluídos anteriormente em SOCORRENCIAALUNO?

    O conteúdo da coluna IDOCORALUNO é único? Isto é, o valor não se repete mesmo que as demais condições (RA, coligada etc) variem?

    Para compreender melhor, seria útil se postasse exemplo dos dados de entrada considerando-se as seguintes condições:

    1. “O select INTO q tenho gera 10 dados e os insere”;
    2. “Passa 10min o sistema irá gerar 11 dados  porém 10 repetidos com os que já estão inserido”.

     
    Considerando-se as pouquíssimas informações fornecidas, eis esboço do código:

    -- código #1 v2
    INSERT into SOCORRENCIAALUNO (colunas)
      SELECT colunas
        from origem as T1
        where not exists (SELECT * 
                            from SOCORRENCIAALUNO as T2
                            where T2.CODCOLIGADA = T1.colunaCODCOLIGADA
                                  and T2.RA = T1.colunaRA
                                  and T2.DATAOCORRENCIA = T1.colunaDATAOCORRENCIA
                                  --and T2.OBSERVACOES = T1.colunaOBSERVACOES
                                  --and T2.IDOCORALUNO = T1.colunaIDOCORALUNO
    );
     

    Entretanto, considerando-se outros tópicos que postou sobre o mesmo assunto, o que me parece é que necessitam de rever todo o processo de registrar a movimentação da catraca. Análise mal realizada gera dificuldades na programação.

     


    e-mail       José Diz     Belo Horizonte, MG - Brasil


    Eu apliquei sua logica do WHERE NOT EXISTS em minha condição e deu certo José Diz. Tanto para adicionar quanto para verificar se existe o dado. Não irei postar aqui a consulta inteira pois a mesma tem mais de 400 linhas. Mas irei postar aqui as pequenas modificações que fiz para fazer com que a mesma se adequasse a minha consulta

    WHERE 
      not exists (SELECT * 
                            from SOCORRENCIAALUNO as T2
                            where T2.CODCOLIGADA = SET5.CODCOLIGADA
                                  and T2.RA = SET5.RA
                                  and convert(varchar,t2.dataocorrencia, 103) = convert(varchar, set5.dataocorrencia, 103)
    							  and t2.CODOCORRENCIATIPO  = set5.CODOCORRENCIATIPO
    							  and t2.CODOCORRENCIAGRUPO = set5.CODOCORRENCIAGRUPO )


    CharlesTI.

    quinta-feira, 26 de abril de 2018 23:23
  • Deleted
    sexta-feira, 27 de abril de 2018 10:28
  • Bom dia José Diz.

    Eu queria comprar apenas a data, o horario queria eliminar mesmo.


    CharlesTI.

    sexta-feira, 27 de abril de 2018 11:26