Eu não tive ainda essa necessidade, mas sei que :

 a)  é possível se ter múltiplos INTO TABLE

 b) position, claro,  funciona para registros de tamanho FIXO ** e ** cujas 
colunas Também tem tamanho FIXOe posição no registro fixa  : por definição, se 
vc tem um delimitador de coluna (o TAB no seu caso), lógico que as colunas 
podem (e mesmo vão) variar

==> Sendo assim, penso que a sua solução não deve funcionar : 
http://basicsoforacleappstechnical.blogspot.com.br/2012/04/sql-loaderloading-data-into-multiple.html
 tem um caso-exemplo de multiple INTOs com colunas delimitadas , no caso com 
vírgula mas poenso que o princípio deve ser o mesmo para delimitado com TAB ...

 EVIDENTE : sempre que me cai nas mãos um problema mais complexo de carga, eu 
dou uma pensada *** CUIDADOSA *** na opção de declarar o arquivo-texto como uma 
external table e mandar um INSERT INTO destino (select from externaltable), 
pois aí eu tenho ** TODO O PODER ** do SQL à minha disposição, podendo fazer 
qque tipo de transformação via funções SQL ou mesmo cláusulas SQL, etc - 
Inclusive, no SQL eu Já Teria o INSERT ALL para inserir em múltiplaS tabelas 
num só INSERT ....

 []s

    Chiappa


--- Em oracle_br@yahoogrupos.com.br, "douglashts" <doughts@...> escreveu
>
> Tenho um arquivo separado por TABS e usarei as informações contidas nele para 
> alimentar duas tabelas diferentes com o seguinte arquivo de controle:
> 
> 
> Load Data
> INFILE 'Caminho do arquivo de entrada'
> BADFILE 'Caminho do arquivo BAD'
> APPEND
> INTO TABLE TABELA_1
> FIELDS TERMINATED BY X'09' TRAILING NULLCOLS
> (ID_TB,
> CAMPO_1,
> CAMPO_2,
> CAMPO_3)
> INTO TABLE TABELA_2
> FIELDS TERMINATED BY X'09' TRAILING NULLCOLS
> (ID_TB, --Que deve possuir o mesmo valor do ID_TB da TABELA_1, mas apesar de 
> ter o mesmo nome são campos diferentes em tabelas diferentes
> CAMPO_1
> CAMPO_2
> CAMPO_3
> )
> 
> As linhas do arquivo estão no seguinte formato, com os dados separados por 
> TABs (não sei se os valores aparecerão em linhas diferentes pela formatação 
> da mensagem, mas os valores estão todos na mesma linha):
> 1     valor_tb1_1     valor_tb1_2     valor_tb1_3     valor_tb2_1     
> valor_tb2_2   valor_tb2_3
> A dúvida é a seguinte:
> Como eu posso armazenar no ID_TB da TABELA_2 o mesmo valor do ID_TB da 
> TABELA_1?
> 
> Tentei as duas seguintes alternativas:
>  - Posicionei o cursor no início do arquivo com o POSITION (1), li a 
> informação e depois tentei "pular" novamente para o registro "5" e continuar 
> o carregamento a partir dali.
> Resultado: Não funcionou pois não encontrei uma forma de referenciar o 
> caminho relativo do registro "5", só consigo especificar que inicie a leitura 
> a partir de um número determinado de bytes (POSITION (*+3), por exemplo, não 
> me leva do segundo registro + 3 (chegando ao 5), e sim me leva até o 3 
> caractere do segundo registro). E como o formato do arquivo não é fixo eu não 
> posso usar o comando POSITION (número_da_coluna:tamanho)
> 
>  - Tentei referenciar diretamente o valor do campo ID_TB da seguinte forma 
> (ID_TB ":ID_TB", CAMPO_1, CAMPO_2, CAMPO_3)
> Resultado: Também não funciona pois acho que o SQL Loader não sabe qual dos 
> dois "ID_TB"s eu estou referenciando.
> 
> 
> Alguém tem uma ideia do que posso fazer?
> 
> Atenciosamente,
> Douglas Henrique
>


Responder a