Fórum Erro ao executar a procedure ! #57013

03/10/2006

0

Colegas..

tenho a seguinte procedure :

CREATE PROCEDURE CRIA_RELATORIO_OS_EM_ABERTO(
    I_DATA_PREVISAO DATE)
RETURNS (
    C_COD_OS CHAR(15))
AS
begin
    delete from TE0300;
    for select distinct C_COD_OS 
        from CM0100 
        where C_DATA_PREVISAO <= :I_DATA_PREVISAO and C_DATA_EXECUCAO is null
        into :C_COD_OS
    do
    begin
        insert into TE0300(C_COD_OS) values (:C_COD_OS);
    end
end


fazendo o select separado resulta nos seguintes códigos :

[list:6c51f0e2dc]
00000000000007
00000000000008
[/list:u:6c51f0e2dc]

Mas quando executo a procedure inteira, dá o seguinte erro:

can´t format message 13:99 -- message file C:\AQUIVOS DE PROGRAMAS\HK-SOFTWARE\firebird.msg not found lock conflict on no wait transaction violation of PRIMARY or UNIQUE KEY constraint ´PK_TE0300´ on table ´TE0300´.


Alguém sabe me dizer o que estou fazendo errado..

obs : estou usando o software IBExpert.


Cabelo

Cabelo

Responder

Posts

26/10/2006

Cabelo

sobe... :(


Responder

Gostei + 0

26/10/2006

Catunda

Cabelo,
ta acusando violação de chave primaria na tabela TE0300.
Experimenta colocar um SUSPEND após a linha do INSERT INTO.


Responder

Gostei + 0

31/10/2006

Cabelo

Colega..

Já coloquei e dá o mesmo erro..

O que parece estar acontecendo é que no comando da 1ª linha delete from... não está sendo sendo executado ou melhor não está comitando.. sei lá..

Mas não deveria se comportar assim.. pois estamos falando da mesma procedure..

não sei o que é...

Você tem idéia???


Responder

Gostei + 0

05/11/2006

Acacio

Não entendi direito para que tu queres esta procedure mas vamos lá.

Tente Assim:

CREATE or Alter PROCEDURE CRIA_RELATORIO_OS_EM_ABERTO(
I_DATA_PREVISAO DATE)
RETURNS (
C_COD INTEGER)
AS
declare variable C_COD_OS INTEGER;
begin
delete from TE0300;
for select distinct C_COD_OS
from CM0100
where C_DATA_PREVISAO <= :I_DATA_PREVISAO and C_DATA_EXECUCAO is null
into :C_COD
do
begin
SUSPEND;
insert into TE0300(C_COD_OS) values (:C_COD);
C_COD = 0;
end
end


Responder

Gostei + 0

06/11/2006

Cabelo

Não entendi direito para que tu queres esta procedure mas vamos lá.


Colega.. esta procedure seleciona em uma tabela Temporária no banco.. as OS´s que estão ´vencidas´ e ainda não foram executadas..

tenho que usá-las assim, pois o meu sistema é utilizado remotamente e se precisar selecionar as OS´s todas a svezes que utilizar o sistema... fica lento..

Tente Assim: CREATE or Alter PROCEDURE CRIA_RELATORIO_OS_EM_ABERTO( I_DATA_PREVISAO DATE) RETURNS ( C_COD INTEGER) AS declare variable C_COD_OS INTEGER; begin delete from TE0300; for select distinct C_COD_OS from CM0100 where C_DATA_PREVISAO <= :I_DATA_PREVISAO and C_DATA_EXECUCAO is null into :C_COD do begin SUSPEND; insert into TE0300(C_COD_OS) values (:C_COD); C_COD = 0; end end


Fiz exatamente como você me disse e tive problemas pois o código da OS não é numérico.. e char(15), tirei a linha

C_COD = 0;


e assim funcionou :

CREATE PROCEDURE CRIA_RELATORIO_OS_EM_ABERTO(
    I_DATA_PREVISAO DATE) 
RETURNS (C_COD_OS CHAR(15))
begin 
    delete from TE0300;
    for select distinct C_COD_OS
        from CM0100 
        where C_DATA_PREVISAO <= :I_DATA_PREVISAO and C_DATA_EXECUCAO is null 
        into :C_COD_OS
    do 
    begin
      SUSPEND;
      insert into TE0300(C_COD_OS) values (:C_COD_OS);
    end
end


muito obrigado..

mas mais uma coisa..

qual é a diferença entre o suspend antes do insert e o suspend depois do insert como estava utilizando???

o suspend funciona como um commit no delphi dentro de uma procedure no firebird ????

valeu...


Responder

Gostei + 0

07/11/2006

Acacio

Não que eu saiba o suspende não funciona como commit;
Ele só joga o valor recebido na tela;


Responder

Gostei + 0

07/11/2006

Cabelo

Não que eu saiba o suspende não funciona como commit; Ele só joga o valor recebido na tela;


Exatamente... foi assim que eu aprendí..

mas se tirar o suspend antes do insert não executa e dá erro...

com o suspend funciona perfeitamente..

sei lá..

não entendí..

valeu


Responder

Gostei + 0

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

Aceitar