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 > > > > > > > > > >