none
Gerando um contador acumulativo RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho o seguinte problema:

    Possuo as seguintes tabelas com seus respectivos campos:

    CURSOS
    • Código do Curso (Int)
    • Nome (Varchar(100))
    • Carga Horária (Int)
    • Ementa (Text)
    • Área Profissional (Int)

    CURSO POR UNIDADE
    • Código do Curso por Unidade (Int)
    • Código do Curso (Int)
    • Código da Unidade (Int)
    • Ativo (Char(1))
    • Item (Int)
    TURMA
    • Código da Turma (Int)
    • Data Inicial (Date)
    • Data Final (Date)
    • Código do Curso por Unidade (Int)
    • .....

    Muito bem, o q estou precisando fazer é, cada vez q eu criar uma turma seja incrementado no campo Item da tabela Curso por Unidade mais um.

    Qual o objetivo? Tenho o cadastro de cursos, após realizar este cadastro, o código deste curso será inserido automaticamente na tabela Curso por Unidade 40 vezes, isto pq eu tenho 40 municípios q ofertarão este mesmo curso. Até aí tudo bem, pq já tenho o cadastro de unidades e é só usar um loop em minha aplicação para fazer isso. O problema é q ao criar uma turma irei vincular o Código do Curso por Unidade à Turma só q eu preciso gerar o número de vezes q este curso foi ofertado para aquela unidade, daí o campo Item (em destaque) na tabela Cursos por Unidade, então, pergunto a vcs, para isso devo usar triggers ou isso seria inviável? E se for o correto, como posso criá-la, pois nunca trabalhei com triggers.

    Grato,

    Ilano.
    terça-feira, 20 de janeiro de 2009 14:33

Todas as Respostas

  • Ilano,

     

    A principio poderiamos pensar utilizar uma stored procedure ou até mesmo trigger!!!

    terça-feira, 20 de janeiro de 2009 15:23
  • Olá llano,

     

    Porque você não faz isso na aplicação?

     

    Abraços

    terça-feira, 20 de janeiro de 2009 16:12
  • Olá Demétrio,

    Bem, o meu problema é q eu tenho uma quantidade X de municípios, o q chamamos de áreas de abrangência, para cada unidade e tenho medo de usar algo como um COUNT para fazer isso, pois como é um sistema multiusuário temo q as informações fiquem inconsistentes.
    terça-feira, 20 de janeiro de 2009 16:34
  • Olá Júnior,

    Como poderia ficar essa trigger, então? Como eu nunca usei triggers como poderia criá-la?
    terça-feira, 20 de janeiro de 2009 16:35
  • Galera,

    Pensando mais um pouco, acredito q essa solução não seja a ideal para o q eu pretendo fazer.

    A idéia é a seguinte:

    Quero gerar um código para identificar essa turma, para isso imaginei a seguinte hipótese:

    O código da Unidade + Código do Curso + Item (Nº de vezes q o curso foi ofertado para a unidade)

    01.002.000025
    01.002.000026
    ....

    Este item na verdade seria a quantidade de vezes q um determinado curso seria ofertado para uma determinada Unidade, então, ao criar uma nova turma seria incrementado um valor para o campo item e depois seria jogado para a tabela de Turmas para q eu possa gerar um código para cada turma. Bem imaginei assim:

    1º) Abro uma turma;
    2º) Consulto na tabela CursoUnidade se a Unidade e o Curso finculados à turma já foram cadastrados e incremento +1 no campo Item e salvo a tabela CursoUnidade;
    3º) Jogo para a tabela da turma aquele valor incrementado e salvo a tabela da turma.

    O problema, está quando se trabalha com vários usuários, pois como já disse anteriormente, são vários municípios (áreas de abrangência) para cada Unidade.

    xxiii.... Será q eu expliquei direitinho???
    terça-feira, 20 de janeiro de 2009 17:00
  • Olá ilanocf,

     

    Você não poderia utilizar uma chave artificial (um identity) ao invés de utilizar colunas como código da unidade, codigo do curso ? Esse Identity não teria nenhum relação com o negócio e trataria a questão multi usuário.

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

     

    terça-feira, 20 de janeiro de 2009 17:18
  • Olá Gustavo,

    Desde já agradeço sua atenção. Bem, uma chave como vc especificou (um identity) não seria um seqüencial? Dessa forma, como poderia ter a quantidade de vezes q um curso A foi ofertado para uma unidade B? Esse número, com o passar do tempo, não se tornaria muito grande?
    terça-feira, 20 de janeiro de 2009 17:29
  • O q estou precisando fazer é isso:

    UNIDADES
    01 - Unidade de Fortaleza (Sede)
    02 - Unidade de Maranguape
    ...

    CURSOS
    01 - Farmácia Viva
    02 - Produtor de Hortaliças
    03 - Eletricista Predial
    ...

    O código da turma deverá ser gerado pelo Código da Unidade + Código do Curso + Item (Nº de vezes q o curso foi ofertado para a unidade)


    01.001.000001
    01.002.000001
    01.002.000002

    01.003.000001
    01.003.000002
    01.002.000003
    02.001.000001
    01.003.000003
    01.001.000002
    02.001.000002
    02.001.000003
    02.003.000001
    ...

    Vejam q:

    Na Unidade 01 - Unidade de Fortaleza (Sede) foram ofertados os seguintes cursos:

    - 01 - Farmácia Viva ----------------------------- Ofertado 2 vezes
    - 02 - Produtor de Hortaliças ----------------- Ofertado 3 vezes
    - 03 - Eletricista Predial ------------------------ Ofertado 3 vezes

    Na Unidade 02 - Unidade de Maranguape foram ofertados os seguintes cursos:

    - 01 - Farmácia Viva ----------------------------- Ofertado 3 vezes
    - 02 - Produtor de Hortaliças ----------------- Ofertado 1 vez
    terça-feira, 20 de janeiro de 2009 18:24
  • Olá pessoal,

    Acho q encontrei uma saída.

    Bem, como toda a Turma será gerado um código seqüencial, então pensei em fazer isso:

    SELECT COUNT(*) AS ITEM FROM T_Turmas
    WHERE Tur_Codigo < P1
    AND Ud_Codigo = P2
    AND Cur_Codigo = P3

    Onde P1, P2 e P3 são os parâmetros.

    P1 = Chave Primária da Tabela;
    P2 = Código da Unidade;
    P3 = Código do Curso.

    Obtendo esse resultado, eu poderei qual a posição aquela foi ofertado determinado curso de uma unidade para uma determinada turma.

    O problema é q, como eu faria isso usando TRIGGERS? Preciso q isso seja feito logo após salvar uma turma, mas, tb preciso q seja verificado se a consulta retorna um valor maior que 0, pois se for zero o resultado da consulta deverá ser 1.
    quarta-feira, 21 de janeiro de 2009 18:09