Commit

Firebird

03/09/2005

Pessoal, meu problema é o seguinte...

Criei uma procedure que cria uma tabela temporária dentro do banco e tenta inserir alguns valores dentro dessa tabela.

Porém a tabela não é criada fisicamente, enquanto não termina a execução da procedure, acho que isto se deve pelo fato de não commitar dentro da procedure...

Tem como eu dar um commit dentro da procedure??


Uso delphi 7, DBExpress com driver da UIB.


Thomaz_prg

Thomaz_prg

Curtidas 0

Respostas

Afarias

Afarias

03/09/2005

1- até onde sei o IB não permite executar commandos DDL dentro de procedimentos e triggers (PSQL)

2- não, vc não pode controlar transações dentro de um procedimento ou trigger


T+


GOSTEI 0
Thomaz_prg

Thomaz_prg

03/09/2005

1- Bom, eu usei a instrução EXECUTE STATEMENT ´Create table...´ dentro da procedure. Quando a procedure termina sua execução e é comitada a tabela aparece...
Fiz até um teste, não comitei após a execução, e tentei usar a instrução
CREATE TABLE ... (no ibconsole) e recebi a mensagem de que a tabela já existia.

Isso me deu ao entender que só faltava comitar para gravar fisicamente a tabela...

Será que não tem como eu fazer isso??

Só para explicar, pois talvez alguém saiba uma formamais fácil de fazer, é que quero que, na linha da tabela, seja feito tipo um histórico. P. Ex.

Tabela A
Nome Valor
A 100,00
B 50,00
C 30,00

e gostaria que aparecesse:

Nome Valor Saldo
A 100,00 100,00
B 50,00 150,00
C 30,00 180,00

Alguem tem alguma de idéia de como posso fazer isso??


GOSTEI 0
Afarias

Afarias

03/09/2005

|Alguem tem alguma de idéia de como posso fazer isso??

com 1 simples procedimento... sem precisar criar tabela nem nada.


T+


GOSTEI 0
Thomaz_prg

Thomaz_prg

03/09/2005

Obrigado colega pela atenção....

desculpe a ignorância mas é que realmente não consegui bolar nada para resolver meu problema... poderia me dar uma ajuda??


GOSTEI 0
Afarias

Afarias

03/09/2005

set term ^;

create procedure saldos returns (
  nome varchar(10), 
  valor numeric(9,2),
  saldo numeric(9,2))
begin
  saldo = 0;
  for select nome, valor from tabela
    order by nome
    into :nome, :valor do
  begin
    saldo = saldo + valor;
    suspend;
  end
end^


para usar:

select * from saldos;


espero q este pequeno exemplo sirva de ajuda

T+


GOSTEI 0
Thomaz_prg

Thomaz_prg

03/09/2005

Valeu pela ajuda.


GOSTEI 0
POSTAR