Pessoal, boa tarde.

Estou desenhando um processo para ler um arquivo do servidor e gravar
algumas informações desse arquivo em uma tabela no banco. Em cada linha do
arquivo tenho um ID que será utilizado para encontrar o registro
correspondente na tabela e fazer o UPDATE.

Primeiramente, vamos ao meu cenário:

Banco: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Aplicação: Oracle E-Business Suite 11.5.10.2
Tabela: A tabela é de funcionários, no momento tem um pouco mais de 21.000
registros. Mas já sei que no futuro terá uma carga de mais de 300.000. O
campo que vou utilizar para identificar os registros tem índice, seria o
número de cadastro do funcionário (um VARCHAR2(30))
Arquivo: O modelo que tenho de exemplo tem em torno de 19 mil linhas, mas
isso pode variar bastante

Precisam de mais alguma informação?

Estou analisando as possíveis maneiras de fazer isso e gostaria da opinião
de vocês.

1) A maneira mais simples e creio que a mais utilizada seria simplesmente
ler o arquivo e para cada linha do arquivo fazer um UPDATE na tabela. Mas
não sei dizer se é a mais performática.

2) Poderia criar uma global temporary table e carregar ela primeiro com
todos os registros do arquivo e depois em um único UPDATE faria a
atualização, fazendo o JOIN da tabela temporária com a tabela de destino.

3) No lugar da GTT (da opção 2), poderia utilizar uma collection. Mas não
sei qual o limite de dados de uma collection. Será que aguenta muitos
registros?

Também gostaria da opinião sobre o uso do FORALL, BULK COLLECT ou outro
recurso interessante nesse cenário. Acham válido? Teria bons ganhos?

Obrigado.

--
Eduardo Schurtz

Responder a