[oracle_br] Re: Parametro de entrada do tipo array na Procedure !!

2007-05-30 Por tôpico Asley
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 !!

2007-05-30 Por tôpico jlchiappa
É 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 !!

2007-05-30 Por tôpico Marcos Soares
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 !!

2007-05-30 Por tôpico jlchiappa
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 !!

2007-05-30 Por tôpico Asley
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 !!

2007-05-29 Por tôpico jlchiappa
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 !!

2007-05-29 Por tôpico jlchiappa
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
>