[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
Putzz.. perfeito!! Agora entendi!! Origado Chiappa. --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <[EMAIL PROTECTED]> escreveu > > 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 , é > 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" > 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" > > 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" > > 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:0P11_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" > > escreveu > > > > > > > > > > Pessoal, alguem pode me ajudar?! > >
[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
É o "Effective Oracle by Design", mas o outro livro recente dele ("Expert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutions") faz uma excelente dobradinha, eu recomendo que vc adquira ambos. Só torno a frisar, eles são muito bons mas *** NÃO SÃO substitutos dos manuais, os ler SEM ter estudado os manuais Oracle muito certamente não vai de dar um bom retorno do seu investimento, é os manuais primeiro e os livros depois, como COMPLEMENTO. []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "Marcos Soares" <[EMAIL PROTECTED]> escreveu > > Chiappa, > > Fiquei interessado no livro do Tom. > > Qual o título? > > Grato, > > Marcos > > > Em 30/05/07, jlchiappa <[EMAIL PROTECTED]> escreveu: > > > > 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 , é > > 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" > > 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" > > > 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" > > > 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:0P11_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 > >
Re: [oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
Chiappa, Fiquei interessado no livro do Tom. Qual o título? Grato, Marcos Em 30/05/07, jlchiappa <[EMAIL PROTECTED]> escreveu: > > 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 , é > 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" > > 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" > > 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:0P11_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" > > 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
[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
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 , é 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" > 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" > 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:0P11_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" > 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
[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
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" <[EMAIL PROTECTED]> 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" 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:0P11_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" 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, > > > pproahistoricodaf.proa%type, > > > ptiporespostahistoricodaf.tiporesposta%type, > > > pestado historicodaf.estado%type, > > > pcodigoobjetohistoricodaf.codigoobjeto%type, > > > pposicaoxnumber, > > > pposicaoynumber ) > > > is > > > > > > vposicaohistoricodaf.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 > > > > > >
[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
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" <[EMAIL PROTECTED]> 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:0P11_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" 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, > > pproahistoricodaf.proa%type, > > ptiporespostahistoricodaf.tiporesposta%type, > > pestado historicodaf.estado%type, > > pcodigoobjetohistoricodaf.codigoobjeto%type, > > pposicaoxnumber, > > pposicaoynumber ) > > is > > > > vposicaohistoricodaf.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 > > >
[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!
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:0P11_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" <[EMAIL PROTECTED]> 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, > pproahistoricodaf.proa%type, > ptiporespostahistoricodaf.tiporesposta%type, > pestado historicodaf.estado%type, > pcodigoobjetohistoricodaf.codigoobjeto%type, > pposicaoxnumber, > pposicaoynumber ) > is > > vposicaohistoricodaf.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 >