Passa al contenuto principale

DEFTRANSACTION

DesktopWeb

La specifica definisce un'unità di lavoro (aggiornamento) sulla base dati, seguendo i passi:

  • crea la transazione sul database specificato (esegue l'istruzione BEGIN TRANSACTION);
  • esegue la call back GESTIONEDATI, deputata alle operazioni di aggiornamento della base dati;
  • completa le operazioni di aggiornamento (esegue l'istruzione COMMIT).
suggerimento

Nel caso di errore, l'ambiente o il programma può interrompere la transazione eseguendo la specifica @ROLLBACKTRANSACTION. In questo caso l'ambiente non esegue l'operazione di COMMIT al termine della routine di aggiornamento dati.

warning

Nel caso due o più transazioni siano in competizione per l'accesso e l'utilizzo di record/tabelle in comune, è possibile che si verifichi il fenomeno denominato 'DEADLOCK'. Questa situazione provoca l'interruzione di una (o più) delle transazioni coinvolte ed indica uno stallo rilevato dal gestore della base dati, dove nessuna delle transazioni procede.

Deadlock e configurazione siscfg.ini Il deadlock non è un errore che può essere eliminato a priori e dipende dalla particolare sequenza temporale di esecuzione delle transazioni. È possibile intercettare l'errore di avvenuto deadlock specificando una call back tramite l'attributo GESTIONEDEADLOCK. In questa call back si può richiamare il metodo BCDatabaseInfo.SetRetryTransaction per ripetere l'aggiornamento, ripetendo la sequenza di creazione della transazione, esecuzione della call back GESTIONEDATI, completamento della transazione.

L'evento di deadlock è registrato sul file siserr.log, con un messaggio simile al seguente: 'Si è verificato un errore di deadlock (procedura %s sorgente %s linea %d, specifica %s). Tentativo %d\n' E' possibile modificare la registrazione degli eventi sul file SISERR.LOG, impostando la soglia di rilevamento dell'evento:

Parametri

ParametroDefinizioneI/OInformazioniVersione traduttoreSMP
GESTIONEDATIAzioneINObbligatorioDesktopWeb
GESTIONEDEADLOCKAzioneINDesktopWeb
LIVELLOISOLAMENTOEnumerazioneINDesktopWeb
ERROREInteroINDesktopWeb

GESTIONEDATI

AzioneINInputObbligatorioObbligatorioValore non necessarioValore non necessarioDesktopWeb

Callback eseguita contenente le operazioni di aggiornamento dei dati sotto transazione.

GESTIONEDEADLOCK

AzioneINInputValore non necessarioValore non necessarioDesktopWeb

Callback eseguita in caso di DEADLOCK.
In questa callback si può richiamare il metodo BCDatabaseInfo.SetRetryTransaction per ripetere l'aggiornamento, ripetendo l'esecuzione della callback GESTIONEDATI, e la COMMIT a completamento della transazione.

note

Da versione 31.1 non è più necessario richiamare il metodo BCDatabaseInfo.SetRetryTransaction perché l'ambiente effettua comunque 3 tentativi a fronte di un deadlock.

LIVELLOISOLAMENTO

EnumerazioneINInputValore non necessarioValore non necessarioDesktopWeb

Permette di definire il livello di isolamento della transazione. Se non specificato, il valore di default è #COMMIT_READ

note

Al termine della transazione il livello di isolamento è ripristinato al suo valore precedente.

Parametro enumerato, può assumere i seguenti valori:

ValoreDescrizione
UNCOMMITTED_READ
COMMIT_READ
REPETEABLE_READ
SERIALIZABLE

ERRORE

InteroINInputValore non necessarioValore non necessarioDesktopWeb
SottoParametri

Consente al programma di intercettare e gestire l'errore restituito dalla funzione.

suggerimento

Utilizzare uno dei metodi GetLastError*() della classe BCContextInfo per ottenere le informazioni dell'errore.

Esempi

Definizione

 '@DEFTRANSACTION GESTIONEDATI[OperationsOnDB()] _
GESTIONEDEADLOCK[DeadlockManagement()]