Duvida de sessão banco.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Ter, 23 Out 2007 2:33 pm

Boa Tarde pessoal, queria saber se tem como eu fazer assim:

insert into movimento select * from movimento;

e dai em outro Sql Plus com outra sessão ver quantos registros já foram inseridos na tabela?
meguelito
Localização: Santa Catarina

Att.:
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br

Mensagemem Ter, 23 Out 2007 2:52 pm

Brother,

Desde que ambas tenham a mesma quantidade (e ordem) de colunas, sim, perfeitamente.

Código: Selecionar todos

INSERT INTO TESTE SELECT * FROM TAB_TESTE;



Caso contrário, corrija as colunas no lugar do "*".

qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 23 Out 2007 2:55 pm

Acho que você não entendeu minha pergunta.

Eu quero saber se tem como eu ver quantos registros já forma inseridos por um insert sem dar commit entendeu?
meguelito
Localização: Santa Catarina

Att.:
Alan Juliano Metzger
Programador Oracle
Inside System Informática
Msn/E-mail: alanjuliano@yahoo.com.br

Mensagemem Ter, 23 Out 2007 3:08 pm

E ai meguelito, beleza??

q eu saiba não tem como ver o resultado de outra sessao a não ser q você commite os dados..
bem, da uma procurada na net sobre "set auto commit", não tenho certeza q vai resolver seu problema..
você não poderia montar um bloco anonimo pra fazer isso? se puder não é dificil de fazer isso q você precisa...

[]s
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Ter, 23 Out 2007 3:18 pm

Desculpa brother,

Mas, ver em outra sessão, sem commit, desconheço e, acho q não tem como fazer...
Não existe outra forma de solucionar teu problema?
O que você realmente necessita?
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Seg, 29 Out 2007 12:42 pm

Não sei se isso irá dar certo, mas tenta fazer o seguinte:

Declara uma variável e a cada linha ela recbe "+1" daí você manda o PL parar quando essa variável chegar a um valor que você queira (Ex.: o valor de linhas "x" inseridas), porém não vai ver os dados que foram inseridos, só vai conseguir ver os dados depois de dar o commit.

Além disso não faço idéia.

Abraço
Raphaelbi
Localização: Rio de Janeiro - RJ

Raphael Porto

Mensagemem Seg, 29 Out 2007 5:50 pm

Dependendo do quanto você precise disso, seria possível criar uma tabela para controlar a quantidade de registros inseridos, alimentada por uma segunda função que utilize o AUTONOMOUS_TRANSACTION, para que lá dentro você possa realizar o commit da quantidade de registros, sem realizar o commit na aplicação principal.

Código: Selecionar todos
procedure p_atualiza_contagem (p_qtde_atual in number)
is
   pragma autonomous_transaction;
begin
   update tabela_controle set quantidade = p_qtde_atual;
   commit;
end p_atualiza_contagem;

procedure p_insere_movimento
is
   v_qtde number := 0;
begin
   for x in
   ( select rowid rid from movimento
   ) loop
      insert into movimento
      select * from movimento where rowid = x.rid
      ;

      v_qtde := v_qtde + 1;

      -- Só atualizar a tabela a cada n registros, para não afetar muito mais a performance...
      if (mod(v_qtde, 1000) = 0) then
         p_atualiza_contagem(v_qtde);
      end if;

   end loop;
end p_insere_movimento;


Mas é bem provável que a solução acima seja mais lenta do que a solução original... mas de qualquer forma está aí a dica.
rogenaro
Localização: Londrina - PR

Rafael O. Genaro



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante