Colega, a tabela  GTT não tem *** NADA VEZES NADA *** a ver com os 
nomes dos arquivos, ok ? A minha sugestão sobre ela era que vc 
tivesse uma GTT criada com a estrutura do seu registro, e o programa 
OCI faria um INSERT nela e chamaria a procedure SEM ARGUMENTO ALGUM, 
a procedure leria a GTT normalmente, sendo até possível na procedure 
vc fazer INSERT /*+ APPEND */ tabelareal (select * from GTT);  ok ? 
Arrays são muito bons para volumes ** PEQUENOS **, tal como eu disse 
a hora que eles crescem muito FATALMENTE cedo ou tarde vc esbarra 
nalguma limitação do PL/SQL, ou da RAM do servidor, ou coisas do 
tipo... O que tem a ver com o nome dos arquivos é a EXTERNAL TABLE, 
que é TOTALMENTE OUTRA COISA, ela é uma objeto que permite  vc fazer 
SELECT DIRETAMENTE DE UM ARQUIVO-TEXTO, ok ? Com ela a procedure 
seria INSERT /*+ APPEND */ tabelareal (select * from 
externaltableapontandoproarquivotexto), neste caso pra que vc possa a 
cada vez fazer SELECT dum arquivo-texto com nome diferente, a cada 
vez vc faria um ALTER TABLE nomedaexternaltable LOCATION nnnn , é 
isso, como eu tinha dito.
  Essas opções PODEM não só te facilitar em muito a programação como 
também te dar uma melhoria boa em performance em muitos casos, fica 
por sua conta as avaliar, se não as conhece estude o manual Concepts, 
o SQL Reference e o de desenvolvedores, que vc acha ref, sintaxe e 
exemplos. E é claro, o livro mais recente do Tom Kyte não é nada mau 
pra se ter e estudar, todas as técnicas que citei também estão bem 
discutidas lá.

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Asley" <[EMAIL PROTECTED]> 
escreveu
>
> Muito Obrigado Mestre Chiappa!! 
> Sou grande admirador seu ja tem um tempo. Estou começando no 
oracle. 
> Ja havia lido outro artigo seu sobre as tabelas externas.. só o que 
> ocorre: Os arquivos .txt sao gerados sequencialmente com nomes 
> distintos!! Desta forma nao tem como utilizar a GTT. Nao sei se 
> conseguiremos alterar a aplicaçao para receber estes arquivos. De 
> inicio estou tentando achar uma forma de criar um type fora da proc 
> e passar apenas uma ( variavel := array ) como parametro da proc.
> 
> Obrigado.
> 
> 
> 
> 
> 
> 
> 
> --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <jlchiappa@> 
> escreveu
> >
> > Ah, só outro detalhe : se vc não for usar a opção de external e 
> ficar
> > com a arquitetura atual, EVIDENTEMENTE, arays consomem RAM, tem
> > limites práticos, pra grande volume é INSUPERÁVEL a opção de se 
ter
> > uma GLOBAL TEMPORARY TABLE sendo preenchida pelo tal oci e fazer
> > INSERT appends , merges e quetais nas tabelas reais com select 
from
> > GTT - pra isso basta que a tal oci conecte em modo dedicado (sem 
> pool)
> > e mantenha a conexão, isso é tranquilo numa rotina de carga, 
> imagino eu.
> > 
> > []s
> > 
> >  Chiappa
> > --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <jlchiappa@> 
> escreveu
> > >
> > > Bom, respondendo à sua pergunta, pra começo de conversa vc não 
> diz a
> > > versao de banco, mas desde a 8i um stored PL/SQL pode receber 
> como
> > > parâmetro qquer datatype SQL, inclusive definidos pelo usuário  
> ** e
> > > ** o PL/SQL desde essa versão aceita coleções desses datatypes,
> > > tranquilamente vc poderia ter um datatype record com o seu 
> formato de
> > > registro E ter uma table of desse cara,
> > >
> > http://asktom.oracle.com/pls/asktom/f?
> p=100:11:0::::P11_QUESTION_ID:208012348074#4448954729709
> > > tem exemplo e discussão a respeito.
> > >  Noto porém que SE a sua for uma versão de banco com Suporte 
> (ie, 9i e
> > > acima), vc NÃO NECESSARIAMENTE precisaria dessa rotina extra, vc
> > > tranquilamente poderia ter uma external table e fazer o 
> INSERT/UPDATE
> > > (ou até mesmo o novo comando MERGE!!) lendo *** diretamente *** 
> do
> > > arquivo texto - essa opção do 9i de fazer SELECT dum arquivo-
> texto
> > > (external table) nunca deixa de me surpreender em performance, 
> se vc
> > > não a considerou recomendo experimentar, seria algo tipo :
> > > 
> > > BEGIN
> > >    loop
> > >      if dbms_applicaton_info.get_client_info.. = 'STOP' then
> > >         exit;
> > >      end if;
> > >      procquebuscanomedearq; -- pode ser external function , 
> java, etc
> > >      alter table externaltable nnn; -- mudar nome do arq  a ler
> > >      insert /*+ APPEND */ into tabelareal 
> > >       (select * from externaltableapontandoproarquivo);
> > >       -- ou MERGE, se quiser
> > >     end loop;
> > > END;
> > > 
> > > 
> > > []s
> > > 
> > >  Chiappa
> > > --- Em oracle_br@yahoogrupos.com.br, "Asley" <mineiro_foa@> 
> escreveu
> > > >
> > > > Pessoal, alguem pode me ajudar?!
> > > > 
> > > > Recebo um arquivo .txt que atraves de uma OCI (c++) é 
> carregada p/ 
> > > > oracle  - De 1 em 1 segundo esta OCI recebe um arquivo .txt
> > > > Depois de carregado os dados, temos uma proc para que faz um 
> insert 
> > > > e update para outras tabelas!!
> > > > 
> > > >  O problema é, em vez de passar apenas uma linha na proc 
> passar já 
> > > > várias linhas!! Do jeito q está a proc perde muito tempo 
> executando 
> > > > apenas uma linha qdo é executada!! 
> > > > 
> > > > 
> > > > CREATE OR REPLACE procedure insere_daf (  pcodigodaf       
> > > > historicodaf.codigodaf%type, 
> > > > pdatasistema     number, 
> > > > pdatagps         number, 
> > > > pdataequipamento number, 
> > > > pvelocidade      historicodaf.velocidade%type, 
> > > > pproa            historicodaf.proa%type, 
> > > > ptiporesposta    historicodaf.tiporesposta%type, 
> > > > pestado          historicodaf.estado%type, 
> > > > pcodigoobjeto    historicodaf.codigoobjeto%type, 
> > > > pposicaox        number, 
> > > > pposicaoy        number ) 
> > > > is 
> > > > 
> > > >   vposicao                historicodaf.posicao%type; 
> > > >   vdatasistema          historicodaf.datasistema%type; 
> > > >   vdatagps               historicodaf.datagps%type; 
> > > >   vdataequipamento   historicodaf.dataequipamento%type; 
> > > >   vcodigohistorico      historicodaf.codigohistorico%type; 
> > > > 
> > > > begin 
> > > > ...
> > > > 
> > > > end;
> > > > /
> > > > 
> > > > Se alguem poder me dá uma luz..  
> > > > Atenciosamente,
> > > > Asley
> > > >
> > >
> >
>


Responder a