Trigger após carregamento de dados

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
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Pessoal seguinte.
Seguidamente eu importo os dados para diversas tabelas apartir de arquivos CSV gerados com o Excel.

Para tal, utilizo o SQL Loader, com o comando:

sqlldr control="diretorio_do_arquivo.ctl"

Nesse arquivo CTL existem os campos da tabela e tals, no qual o Oracle insere na tabela.

O caso é que eu preciso rodar uma trigger pra automatizar alguns processos após essa importação, mas acho que dessa forma como estou importando o oracle insere os dados linha por linha. Como minha trigger está AFTER INSERT, a cada linha inserida ele roda a trigger, mas aí não gera o resultado esperado porque é necessário que todos os dados já estejam inseridos para um resultado satisfatório.

alguém saberia me dizer como posso fazer para essa trigger rode somente após a inserção de todos os dados?

Obrigado.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você pode dar um execute immediate alterando sua trigger para disable

e no fim fazer o mesmo so que habilitando ela
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

mas tem como fazer isso nesse arquivos .CTL?
thiago_r_f
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Qui, 17 Abr 2008 4:02 pm
Localização: Rio de Janeiro - RJ
O Backup é meu pastor e nada me faltará!
Thiago Rodrigues de Farias

Dê uma olhada no parâmetro Direct Path:

http://download.oracle.com/docs/cd/F495 ... 8.htm#1027

Dessa maneira você desarmaria as triggers porém, após a carga, você teria q realizar uma ação para disparar a trigger q você precisa rodar.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Do Import and SQL*Loader Fire Triggers?

INSERT triggers fire during SQL*Loader conventional loads. (For direct loads, triggers are disabled before the load.)

The IGNORE parameter of the IMP statement determines whether triggers fire during import operations:

If IGNORE=N (default) and the table already exists, then import does not change the table and no existing triggers fire.

If the table does not exist, then import creates and loads it before any triggers are defined, so again no triggers fire.

If IGNORE=Y, then import loads rows into existing tables. Any existing triggers fire, and indexes are updated to account for the imported data.
http://download.oracle.com/docs/cd/B283 ... iggers.htm
jks1903
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 188
Registrado em: Qui, 04 Fev 2010 8:08 am

Vlw pessoal.
Vou dar uma lida nisso e qualker coisa eu posto.

Obrigado pela ajuda.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Acho que faria mais sentido fazer uma stored procedure.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante