Buscar:
Búsqueda avanzada
|
Navegar por categorías:
|
Evitar bloqueigs i deadlocks durant la execució de stored precedures |
||||
Problema: Aquest canvis son necesaris degut a que utilitzem els controladors ODBC de firebird v 2.0.0.148, aquesta versio i les posteriors tenen un bug que fa que no es produiexi el commit despres d'executar un stored procedure. Fins ara per evitar aquest problema cridavem el procediments amb un select * from nomdelprocediement, pero tot i aixi no acababa de funcionar al 100%. Exemple: lcsql = [select * from procediment(?param1,?param2)] * Tambe es aplicable a la utilitzacio del metode alternatiu de crida del procediment: lcsql = [execute procedure procediment(?param1,?param2)] Si executem aquest codi i el procediement efectua canvis a la base de dades (inserts,deletes,updates), aquest canvis no serán grabats (COMMIT) fins que ho fem explicitament nosaltes. Aquest comportament provoca que es produeixin deadlocks als altres terminals que volen llegir/actualitzar les dadades que encara no han set grabades. nota: El procediments que es criden dintre d'una transacció manual no es veuen afectats per aquest problema ja que nosaltres efectuem el commit o rollbak al final de proces. aux = SQLSETPROP(ThisForm.nConexio,'Transactions',2) aux = SQLSETPROP(ThisForm.nConexio,'Transactions',1) Solució: Per evitar aquest problema haurem d'afegir la instruccio commit al final de la crida del procediment, exemple: lcsql = [select * from procediment(?param1,?param2)]
|
Also read | |
![]() |
Solucionar error (Error de conectividad: No se puede obtener información específica del error. Probablemente el controlador no tiene recursos) |
Otras preguntas en esta categoría | |
» Más preguntas |