[Pentaho] - Criando uma Simples transformação para apagar tabelas de um esquema no Oracle
Vou mostrar abaixo uma tarefa bastante simples utilizando o Pentaho Data Integration, para fins de aprendizado de 2 componentes interessantes, o "table input" (que utilizo em praticamente todos os projetos) e o "Execute Sql Script" (usado eventualmente).
O que esta transformação vai fazer será excluir todas as tabelas de determinado esquema de usuário no banco de dados Oracle. Este mesmo script poderia ser utilizado também para exclusão de qualquer objeto, mas fica para um segundo post.
No primeiro componente "table input" configurei da seguinte forma:
- Nome do Step: Tabelas a Excluir
- Conexão: SPED (o nome da conexão que criei previamente);
- SQL: Aqui fiz um select na tabela "user_tables" do dicionário do Oracle, que me retorna o nome de todas as tabelas (exceto temporárias).
No segundo compontente "Execute Sql Script" configurei assim:
- Nome do Step: Apaga Tabelas
- Conexão: A mesma informada no step anterior: SPED
- SQL: Aqui coloquei o comando para apagar a tabela da base: drop table ?;
- A interrogação se refere a um argumento que vou passar por parâmetro, informado no item "Parameters";
- Execute for each row: Esta opção deve ser marcada para que o componente execute em um loop para cada campo retornado pelo select do componente anterior "table_input". Ou seja, vai disparar o comando "drop table" para cada ocorrência de "table_name".
- Parameters: Aqui seleciono o campo retornado pelo componente anterior "table_name". O valor dele será substituído pela interrogação informada no bloco SQL.
Feito isso basta agora executar a transformação. Após sua execução todas as tabelas físicas do esquema "SPED" terão sido excluídas. Possibilitando assim uma nova carga de dados.
Dúvidas ou sugestões comentem...
Comentários
Silveira
Couldn't execute SQL: insert into controle_carga (nome_tabela, qtd_registro) values (?, 0)
..
ERRO: erro de sintaxe em ou próximo a ","
Onde passo uma string no "parameters".
Pelo visto ele não está reconhecendo a "?" como parâmetro...
O que pode estar acontecendo?
Mas marquei. Parou de dar erro, mas não fez o insert na tabela como eu queria...
Executo do próprio Pentaho, forneço o valor do parâmetro na tela "Execute Transformation" e clico em "Launch".
Nada acontece. O que devo fazer agora?
Obrigado!
Você poderia fazer assim:
insert into controle_carga (nome_tabela, qtd_registro) values (?, 0);
commit;
Claro que fazer o "commit" para cada insert não é a opção mais otimizada. Melhor seria fazer somente no final. Mas daí neste caso talvez fosse mais interessante você utilizar outro componente, como o "table output" por exemplo.
Mas tente o commit primeiro.