- Este tópico contém 12 respostas, 7 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por
burga.
-
AutorPosts
-
7 de janeiro de 2010 às 6:26 pm #91894
brunopb
Participantecaros 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.
7 de janeiro de 2010 às 6:40 pm #91895fsitja
ParticipanteSe 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.
7 de janeiro de 2010 às 7:01 pm #91896diegolenhardt
ParticipanteSe nao estou enganado no oracle11 tem um recurso para criacao de “colunas virtuais”..
7 de janeiro de 2010 às 8:26 pm #91900burga
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!
7 de janeiro de 2010 às 8:35 pm #91903hudsona
ParticipanteMas para comandos dml existe grant a nível de coluna
ex:GRANT UPDATE(COLUMN NAME) ON TABLE TO USER;
7 de janeiro de 2010 às 9:33 pm #91912Leonardo Litz
ParticipanteOlá 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
7 de janeiro de 2010 às 9:43 pm #91921fsitja
ParticipanteCaso 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.
7 de janeiro de 2010 às 9:49 pm #91924Leonardo Litz
ParticipanteCaso 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
7 de janeiro de 2010 às 11:29 pm #91934sancler
ParticipanteE 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.7 de janeiro de 2010 às 11:38 pm #91935Leonardo Litz
ParticipanteComo 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…
7 de janeiro de 2010 às 11:42 pm #91937diegolenhardt
Participantecriando 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 ?
8 de janeiro de 2010 às 12:39 am #91940brunopb
Participanteobrigado 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!
8 de janeiro de 2010 às 3:03 am #91942burga
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…
-
AutorPosts
- Você deve fazer login para responder a este tópico.