Variavel cujo conteúdo é o nome de uma coluna

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Olá,

É possível usar o conteúdo de uma variável que armazena o nome de uma coluna de uma tabela e usar como referência para pegar o valor desta coluna?

Exemplo; digamos que eu queira comparar os valores antigos e novos das colunas de uma tabela. Para não ter vários ifs para cada coluna, gostaria de ter utilizar uma variável que receberia o nome da coluna que quero comparar os valores novos e antidos de um update. Assim:

Selecionar tudo

          var iavel coluna varchar2;

           coluna := 'NM_CLIENTE'

           if (:old.<coluna> <> :new.<coluna>)...
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

O que você pretende realmente fazer?

Criar uma trigger que compara os campos(antigos e novos) a partir de uma variável???

Como você informaria qual o campo que você quer comparar?

Se você consegue informar qual campo você quer comparar, não daria para fazer seu processo antes da realização da trigger??
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Os nomes das colunas eu pego da tabela user_tab_columns.

É que eu tenho que verificar todas as colunas de várias tabelas e eu não queria fazer vários ifs.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Robson,

A sugestão pode ser um pouco complexa, mas talvez você possa desenvolver uma querie com a ajuda da USER_TAB_COLUMNS e a sintaxe do comando DDL de criação de triggers.

Pesquise um pouco mais sobre o assunto nestes links do ASKTOM, que é o site de um diretor técnico da Oracle chamado Tom Kyte:

http://asktom.oracle.com/pls/asktom/f?p ... 9412348055
http://asktom.oracle.com/pls/apex/f?p=1 ... 4825535375

Talvez a solução que o Tom apresenta nestes links (o primeiro dele já apresenta a solução completa) seja o mais próximo possível do que você deseja.

Uma outra sugestão, bem mais "trabalhosa", seria você usar o ERWIN e a linguagem de MACROS do mesmo para criar estas triggers. Só que neste caso você precisaria de um tempinho para estudar como a linguagem de MACROS funciona no ERWIN. Parece a princípio um pouco complicado mas, quando "você pega o jeito", é possível desenvolver os códigos DDL com rapidez e confiabilidade, a partir de uma quantidade pequenas de linhas de comandos de macro. E o melhor é que estas macros te garantem que você não terá problemas futuros ao mudar a estrutura da tabela. A macro lê esta estrutura e monta dinamicamente o código da trigger em tempo real. Você não gasta nenhum tempo tentando fazer a manutenção/atualização do código das triggers. E uma vez que você conseguiu desenvolver uma macro de trigger para uma tabela, você poderá reaproveitar esta macro para gerar as DDL de trigger das demais tabelas do sistema (e aqui não importa quantas colunas a tabela tenha).

Entendo que se trata de um produto pago, mas você pode baixar o ERWIN COMMUNITY EDITION do site da CA (uma versão de avaliação que permite trabalhar com até 20 tabelas) e fazer a engenharia reversa de uma das tabelas do seu banco. Estude então as macros e tente então desenvolver uma trigger. Obtendo uma macro, você pode importar tabela a tabela do seu Erwin e reutilizar a macro para gerar a DDL da trigger da tabela.

Abraços e boa sorte,

Sergio Coutinho
Robson Costa
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 155
Registrado em: Sex, 17 Out 2008 6:05 pm
Localização: Campo Grande - MS

Funcionou. Obrigado
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes