Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
artigo SQL Magazine 11 - Um tradutor de Triggers
Artigo da Revista SQL Magazine -Edição 11.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
![]()

Um Tradutor de Triggers
Há diversos motivos para que se queira portar triggers entre bancos de dados diferentes. Um motivo comum hoje em dia são as políticas de consolidação, centralização, ou padronização de SGBDs, em curso em diversas empresas e que impõem a migração de um sistema feito
Neste artigo apresentaremos uma solução automatizada para um problema muito comum na área de banco de dados: portar triggers entre sistemas gerenciadores de bancos de dados (SGBD). Mais precisamente, iremos mostrar como construir um programa tradutor que reescreva na linguagem do Firebird 1.5 (PSQL) triggers originalmente escritos em PL/SQL Oracle. A técnica a ser utilizada é a mesma empregada na construção de compiladores, e pode ser facilmente adaptada para outros SGBDs. No entanto, é exigido que o programador tenha um mínimo de conhecimentos teóricos sobre construção de compiladores (normalmente ensinado em qualquer curso de graduação em informática). Faremos um breve apanhado da teoria necessária, mostrando o uso das ferramentas mais comuns disponíveis: o lex e o yacc.
Lex e Yacc
O processo de um compilador ou interpretador de uma linguagem de programação é geralmente decomposto em 2 tarefas:
1) Ler o programa fonte e descobrir sua estrutura;
2) Processar sua estrutura para gerar o programa final.
O Lex e o Yacc podem ajudar na primeira tarefa que pode ser subdividida em mais 2 partes:
1) Dividir o código em tokens (função do Lex);
2) Descobrir a hierarquia da estrutura do programa (Yacc).
Lex e yacc são dois programas de linha de comando disponíveis em quase todas as distribuições do Unix e do Linux. O lex deve ser chamado recebendo como entrada um parâmetro que é o nome do arquivo contendo os comandos a serem processados. Por exemplo:
$bash> lex entrada.l
A saída do lex será um programa em C (lex.yy.c) contendo rotinas que serão chamadas pelo nosso compilador.
O yacc deve ser chamado recebendo como parâmetro o nome do arquivo que contém as regras de tradução para o nosso compilador, e produz como saída o código source do compilador (y.tab.c). Esse código fonte contém chamadas para as funções geradas pelo lex no arquivo lex.yy.c (dessa forma, um include é usado para referenciar o arquivo lex.yy.c). Depois basta usar o gcc para compilar o arquivo y.tab.c e assim gerar o executável do nosso compilador.
O programa compilado gerado pelo yacc é um executável que lê um arquivo na entrada padrão e, através das regras de tradução especificadas, produz o arquivo compilado, ou seja, o código traduzido, na saída padrão.
"
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!



