Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Comportamento estranho de Stored Procedure em transação.
Message
From
25/11/2002 08:56:13
 
 
To
All
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Title:
Comportamento estranho de Stored Procedure em transação.
Miscellaneous
Thread ID:
00726391
Message ID:
00726391
Views:
42
Olá grupo.

Esta stored procedure é responsável por fazer a geração de chave primaria na base de dados do nosso sistema.
FUNCTION _st_Gw_GeraId (tcCampo)
	LOCAL lnId,lcArq,lcTabela,llBuff,lnReprocessOld

	lnReprocessOld = SET("Reprocess")
	SET REPROCESS TO 3 SECONDS
	lcTabela = ALIAS()
	lcArq    = "gw_gera_id"
	lnId     = -1
	tcCampo  = UPPER(tcCampo)
	
	
	IF !USED(lcArq)
		USE (lcArq) IN 0 SHARED 
	ENDIF 
	
	SELECT (lcArq)
	GO TOP IN (lcArq) 
	
	LOCATE FOR ALLTRIM(&lcArq..pk) == ALLTRIM(tcCampo)

	IF NOT FOUND()
		APPEND BLANK IN (lcArq)
		REPLACE &lcArq..pk     WITH tcCampo
		REPLACE &lcArq..tabela WITH lcTabela
	ELSE
		IF !RLOCK(lcArq)		&& criar uma rotina para possivel erro.
			ERROR [Registro travado por outro usuário, não permitindo a geração da Chave primária],[Informe a controplan]
			SET REPROCESS TO lnReprocessOld
			RETURN -1
		ENDIF
	ENDIF 
	
	lnId = &lcArq..nextval
	REPLACE &lcArq..nextval WITH &lcArq..nextval + 1
	UNLOCK IN (lcArq)
	USE IN (lcArq)
	SELECT (lcTabela)
	SET REPROCESS TO lnReprocessOld

	RETURN lnId
ENDFUNC 
Funciona perfeitamente até que 2 pessoas estejam em um mesmo cadastro. Tomemos como exemplo um cadastro de produtos.

O teste usa 2 estações. Uma estação realiza um append blank e permanece com a transação em aberto, e aí a outra estação realiza um append blank. O que acontece é que a Stored Procedure acima retorna um erro, porque não consegue travar a tabela indicada pela variavel lcArq. Isso ocorre somente em uma transação. É um comportamento bastante esquisito, e qualquer ajuda neste tópico será (e muito) bem-vinda... Ah, estamos com uma certa urgência com relação a esse problema...

Grato,
Pablo Márcio de Oliveira

Inside the scream is silent, inside it must remain
Next
Reply
Map
View

Click here to load this message in the networking platform