Fórum Stored Procedure-firebird #56043

24/05/2006

0

Caros amigos,
Gostaria de criar uma Stored Procedure q faça o seguinte:
1-update
2-um select
3-outro update
4-retorne o select

gostaria de saber se isso eh possivel
o codigo q usei foi esse:
create procedure p_update_x
returns (d2_p char(60))
as
declare variable d1 char(60);
declare variable d2 char(60);
declare variable d3 char(60);
begin
d1 = ´x´;
update tb_saida set c_flag=:d1 where c_flag=´n´;
select c_variavel from tb_saida where c_flag = ´x´
into :d2;
d3 = ´e´;
update tb_saida set c_flag=:d3 where c_flag=´x´;
end;
porém nao funciona .
gostaria que alguem me desse uma mão.
obrigado.
Vinicius Matos


Vinicius__matos

Vinicius__matos

Responder

Posts

25/05/2006

Emerson Nascimento

dá algum erro ou não altera os dados? o que exatamente você quer fazer? porque a variável de retorno?


Responder

Gostei + 0

25/05/2006

Vinicius__matos

Bom na hora q eu vou criar a procedure nao da erro algum.
porem na hora q vou executar o erro é o seguinte:

multiple rows in singleton select.

ja o variavel de retorno é necessaria pois vou mandar os dados desse select para um outro programa.

obrigado.


Responder

Gostei + 0

25/05/2006

Vinicius__matos

ok. vou temtar ser + claro...
tenho uma tabela chamada
tb_saida com o campo c_variavel char e um campo c_flag char(1) (obs só com n de conteudo.)
o q eu quero é uma stored procedure q mude o c_flag para x de um select q peguando todos os c_flag = x e depois mude o x para e.
e como retorno o select.


obrigado pela sua atenção.

Vinicius Matos


Responder

Gostei + 0

25/05/2006

Joaoshi

Colega você precisa utilizar o FOR SELECT

Espero ter ajudado.


Responder

Gostei + 0

25/05/2006

Emerson Nascimento

dá o erro em tempo de execução porque você executa uma instrução que retorna mais de um registro e tenta jogar isso num campo. pra fazer dessa forma, você precisa de um cursor. faça isso com FOR. tente assim:
create procedure p_update_x 
  returns (d2 char(60)) 
as 
declare variable d1 char(60); 
begin 
  d1 = ´x´; 
  update tb_saida set c_flag=:d1 where c_flag=´n´; 
  for select c_variavel from tb_saida where c_flag = ´x´ 
  into :d2 do
    suspend; 
  d1 = ´e´; 
  update tb_saida set c_flag=:d1 where c_flag=´x´; 
end; 



Responder

Gostei + 0

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

Aceitar