Uma parte importante sobre o ETL é entender como essas
ferramentas trabalham na camada semântica. O ETL é feito através de procedures
em SQL.
E o que é uma procedure?
Uma procedure é um bloco de SQL nomeado. Funciona
logicamente como uma programação estruturada, se você já teve a oportunidade de
estudar Pascal ou C sabe muito bem como funciona. De qualquer forma vamos ver o
básico para termos uma ideia.
Para poder criar uma procedure o usuário deve ter permissão create procedure (GRANT CREATE PROCEDURE
TO NOME_USUARIO) e para criar a procedure em outro schemas o usuário deve ter
permissão alter any procedure (GRANT
ALTER ANY PROCEDURE TO NOME_USUARIO).
Vou utilizar a linguagem PL/SQL
Esta é a sintaxe básica para a criação de uma procedure:
Onde:
·
Replace: Indica que se já existe uma procedure
como nome indicado, esta será eliminada e substituída pela procedure que o
código criará.
·
Bloco PL/SQL: Inicia-se com um BEGIN e termina
com um END ou um END NOME_PROCEDURE. No corpo, entre o inicio e fim, escrevemos
os comandos que a procedure irá executar.
·
Parâmetro: Indica o nome da variável que é
passada na chamada da procedure ou retornará os valores.
·
Modo: Indicará se o parâmetro é de entrada (IN),
saída (OUT) ou os dois (IN OUT). Caso não informemos default será IN.
·
Tipo de Dado: Como o nome diz, indicará o tipo
de dados da variável. Pode ser declarado qualquer tipo de dado do SQL ou do
PLSQL e não será necessário informar o tamanho.
·
IS|AS: A sintaxe do comando aceita os dois, por
convenção usamos IS para criação de procedures. Indica que o algoritmo que se
segue deve ser executado quando chamada a procedure.
Esse é um exemplo de procedure simples.
Certo, esta é uma procedure que tem uma única função, inserir
um registro de uma determinada tabela.
Vamos analisar sua estrutura.
Começa com a sintaxe de criação ou reposição de uma procedure
e seu nome, no caso “inserir”.
A seguir temos o parâmetro, tipo de parâmetro (se é de
entrada ou saída) e seu datatype, entre parênteses, seguido pela palavra IS.
Após isso iniciamos nosso algoritmo. Abrimos com “Begin” e se
segue em PL/SQL o que queremos que ela faça. Inserir os dados passados pelos
parâmetros para tabela chamada “Tb_funcionarios”.
Dizemos também que depois de cumprida esta tarefa ela deve
confirmar a alteração com o “commit”. E encerramos a procedure com o “End
inserir;” sinalizando que sua função foi cumprida e sua execução terminou.
Para executarmos a procedure, com parâmetros, o comando é:
Exec nome_procedure (valor_parametro);
No caso exemplo então:
Exec inserir (215, 9, 'Emerson Fitipaldi', 'R
ficticia, 101', 'Sao Paulo', 'SP').
Claro que inserir um registro é simples o suficiente, criar
uma procedure se torna mais trabalhoso que digitar o próprio comando
diretamente. Para que, então, precisaremos de uma procedure. Simples, podemos
fazer com que mais de um comando sejam executados, nos poupando tempo. Por
exemplo, podemos criar uma procedure que não só insira, mas que caso já exista
código de funcionário informado ela atualize os valores passados nos parâmetros.
Vamos ver essa alternativa:
Nesta alternativa mantivemos os parâmetros passados o
algoritmo de inclusão de dados. Só que quando um valor de um campo unique já
existe na tabela, não poderá ser repetido na inserção gerando um erro. A
novidade desta alternativa está em pedir para a procedure que se houver o erro
ela deve atualizar todos os campos daquele registro na tabela e depois
confirmar a alteração.
Após a execução do programa a procedure confirmará a
alteração e encerrará a atividade.
No caso a clausula “exception when” trata exatamente do
erro. Através dessa clausula podemos dizer qual o erro esperado e dizer o que
fazer quando este aparecer. Quando eu informo o “others” estou dizendo que deve
proceder com a atualização seja o erro que for. Como sempre, não existe uma única
solução e sim soluções mais eficazes que possam prever outros erros ou ações.
Outras soluções podem ser criadas por procedures no banco de
dados. As ferramentas de ETL funcionam com criação e execução de procedures
mais complexas que estas.
Caso queira se aprofundar no assunto e buscar por exercícios
de procedure recomento o seguinte endereço http://www.univasf.edu.br/~mario.godoy/Aulas-BDII/BD%20II%20-%20Aula%209.pdf,
os exercícios começam na pág. 24.
Obrigado pela visita e até o próximo post.
Bibliografia:
Evite fazer ETL com procedures. Ao invés, use alguma ferramenta visual. ETL codificado tem alto risco de bugs, é difícil de manter e de escalar.
ResponderExcluir