Domanda

Qual è l'equivalente delle seguenti istruzioni di SQL Server in DB2?

  • Inizia transazione
  • Commetti transazione
  • Transazione rollback
È stato utile?

Soluzione

Vedi qui per un esempio. Ma fondamentalmente

BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK

Altri suggerimenti

La risposta è in realtà un po 'più complicata di quanto indicato qui. È vero, le transazioni sono standardizzate ANSI e DB2 può supportarle.

DB2 per z / OS può essere una bestia molto diversa dalle altre varianti (LUW, Linux-Unix-Windows, essendo le più comuni). A rischio di insinuarsi, ciò rende l'idea di parlare di DB2 quasi inutile. Stai parlando di una variante specifica del database IBM, ma ciò che funziona in uno può essere completamente non valido in un altro. Presumo che qualunque sia il sapore che l'OP stava usando non era quello z / OS, poiché la risposta BEGIN TRANSACTION è stata accettata.

Per quelli di voi che si imbattono in questo tentativo di utilizzare le transazioni con DB2 z / OS, ecco il riassunto: DB2 per il mainframe non ha transazioni esplicite. Non esiste BEGIN TRANSACTION o qualsiasi altro costrutto comparabile. Le transazioni sono iniziate in modo implicito (di solito indicato come unità di lavoro nei documenti) e commesse o ripristinate esplicitamente (di solito - molti strumenti della GUI, come Toad, hanno una funzione di autocommit che può nasconderti di tanto in tanto).

Dal manuale di riferimento SQL 9.1 z / OS (pagina 28; disponibile all'indirizzo http: //www-01.ibm.com/support/docview.wss?uid=swg27011656#manuals ):

" Un'unità di lavoro viene avviata quando viene avviato un processo di domanda. Un'unità di lavoro viene inoltre avviato quando l'unità di lavoro precedente termina con qualcosa di diverso da la fine del processo di candidatura. Un'unità di lavoro termina con un'operazione di commit, un'operazione di rollback completo o la fine di un processo di applicazione. Un commit o rollback l'operazione ha effetto solo sulle modifiche al database effettuate all'interno dell'unità di lavoro che termina. "

La cosa più vicina che si ottiene quando si scrivono script è specificare manualmente un punto di salvataggio.

Questi assomigliano a questo:

 SAVEPOINT A ON ROLLBACK RETAIN CURSORS;

 UPDATE MYTABLE SET MYCOL = 'VAL' WHERE 1;

 ROLLBACK WORK TO SAVEPOINT A;

A livello superficiale, assomigliano a transazioni esplicite, ma non lo sono. Invece, sono davvero solo punti nel tempo all'interno di una singola transazione implicita. Per molti scopi, possono essere sufficienti, ma è importante essere consapevoli delle differenze concettuali.

 inserisci qui la descrizione dell'immagine Se usi un IDE come Intellij Idea (o altri), non hai la possibilità di avviare esplicitamente una transazione. In altre parole, non è possibile digitare "inizia transazione" nella console del proprio IDE.

Ma puoi disabilitare "Auto-commit" (e riattivarlo in seguito) e quindi digitare "commit" o " rollback "nella console.

In IDEA c'è anche un pulsante per "commit" e un pulsante per "rollback". Dai un'occhiata al dump dello schermo allegato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top