Pular para o conteúdo
Visualizando 13 posts - 1 até 13 (de 13 do total)
  • Autor
    Posts
  • #91894
    brunopb
    Participante

      caros amigos,

      estou procurando uma alternativa para criar um sinonimo para um campo de uma tabela minha. a aplicação chama este campo com outro nome, é possivel criar um sinonimo para este campo nessa tabela??

      mudar a estrutura da tabela não é uma opção… por causa de outras aplicações…. grato.

      #91895
      fsitja
      Participante

        Se você não pode mudar a tabela, você poderia criar uma view sobre essa tabela e chamar a coluna por outro nome através de um alias.

        #91896
        diegolenhardt
        Participante

          Se nao estou enganado no oracle11 tem um recurso para criacao de “colunas virtuais”..

          #91900
          burga
          Participante

            [quote=”diegolenhardt”:1dh716d1]Se nao estou enganado no oracle11 tem um recurso para criacao de “colunas virtuais”..[/quote]

            Existe sim este recurso, mas colunas virtuais não são como sinônimos… E não se pode realizar comandos DML nelas…

            Também acho que a solução das views seria melhor (a única que consigo imaginar)… E sendo uma view simples, você pode rodar comandos DML nela tranquilamente!

            #91903
            hudsona
            Participante

              Mas para comandos dml existe grant a nível de coluna
              ex:

              GRANT UPDATE(COLUMN NAME) ON TABLE TO USER;

              #91912
              Avatar photoLeonardo Litz
              Participante

                Olá brunopb

                Vai aqui minha idéia.

                1º Se seu banco de dados é da versão 11g, crie uma virtual column.
                 2º Você pode criar uma view, unico problema que você tera que mudar o nome do objeto de referencia para o nome da view em sua aplicação.
                 3º Pior situação, se não tiver mais nenhum jeito... Crie outra coluna nesta tabela que terá os mesmos dados da coluna existente, e crie uma trigger nas duas colunas para quando alterar em uma coluna, reflita em outra tb, mantendo assim ambas com mesmo valor. Mas só faça isso se você não puder criar uma view e modificar a aplicação. É uma grande gambiarra.
                

                Vlw Leonardo Litz

                #91921
                fsitja
                Participante

                  Caso caia na alternativa 3, recomendaria colocar uma check constraint
                  estilo:

                  check (col1 = col2)

                  Se forem colunas NOT NULL. Se não forem você vai ter que tratar o caso onde pode ter null com OR ou com NVL.

                  check (((col1 = col2) AND (col1 IS NOT NULL AND col2 IS NOT NULL)) OR (col1 is null AND col2 is null))

                  Isso porque algum espírito de porco pode sempre desabilitar sua trigger e destruir com a consistência do seu banco de dados, intencionalmente ou não.

                  #91924
                  Avatar photoLeonardo Litz
                  Participante

                    Caso caia na 3 alternativa.

                    Faz assim:

                    alter table table add (b VARCHAR2(10), constraint ck_testedba check (a = b));
                    update table
                    set b = a;

                    vlw Leonardo Litz

                    #91934
                    sancler
                    Participante

                      E a normalização da tabela?
                      vai pra onde?

                      na minha opinião criar mais uma coluna não é um boa opção!
                      prefiro a sugestão inicial do fsitja de se criar uma view.

                      #91935
                      Avatar photoLeonardo Litz
                      Participante

                        Como disse, se não tiver mais jeito.

                        A melhor forma de fazer é mudar a aplicação para buscar sempre o mesmo campo, da mesma tabela, sem nem mesmo utilizar view. Mas quando não se tem jeito…

                        #91937
                        diegolenhardt
                        Participante

                          criando a view, talvez implicara na alteração de código dentro dos aplicativos que referenciam a tabela, tem que analisar bem o impacto antes, eu acho…

                          aí surge uma pergunta, e porque nao fazer um refactor em todos os lugares que referenciam e colocar o novo nome?

                          e então renomear a coluna no banco?

                          já que deseja-se manter a ordem, esta seria a solução ideial, qual a real necessidade de se fazer isso ?

                          #91940
                          brunopb
                          Participante

                            obrigado pelo suporte pessoal…

                            meu oracle é o 10g, consegui entrar em contato com o desenvolvedor… essa sempre foi a melhor opção mas não imaginei que conseguiria…

                            mas gostei de saber que no 11g isso é possível.

                            grato!

                            #91942
                            burga
                            Participante

                              [quote=”brunopb”:12ifl3ap]obrigado pelo suporte pessoal…

                              meu oracle é o 10g, consegui entrar em contato com o desenvolvedor… essa sempre foi a melhor opção mas não imaginei que conseguiria…

                              mas gostei de saber que no 11g isso é possível.

                              grato![/quote]

                              Como eu disse, as colunas virtuais do 11g não permitem operações DML, ou seja, se a sua aplicação executa algum insert ou update nesta coluna o recurso da coluna virtual não te serviria. Só no caso de selects…

                              Mas se conseguiu resolver, é isso o que importa…

                            Visualizando 13 posts - 1 até 13 (de 13 do total)
                            • Você deve fazer login para responder a este tópico.