Fórum Commit #52629

03/09/2005

0

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

Responder

Posts

05/09/2005

Afarias

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+


Responder

Gostei + 0

09/09/2005

Thomaz_prg

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


Responder

Gostei + 0

09/09/2005

Afarias

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

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


T+


Responder

Gostei + 0

10/09/2005

Thomaz_prg

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


Responder

Gostei + 0

10/09/2005

Afarias

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+


Responder

Gostei + 0

11/09/2005

Thomaz_prg

Valeu pela ajuda.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar