As transações são um conjunto de instruções SQL executadas em bloco. Ou todas as instruções têm êxito ou nenhuma delas. As transações utilizam blocos para preservar a integridade dos dados durante sua execução. Se a transação termina corretamente, pode utilizar o comando COMMIT para armazenar permanentemente suas modificações. Caso contrário, chame o comando ROLLBACK para cancelar todas as modificações e restaurar o banco de dados a seu estado anterior.
Não há diferença entre uma transação 4D e uma transação SQL. Os dois tipos compartilham os mesmos dados e processos. As instruções SQL incluídas em uma estrutura Begin SQL/End SQL, o comando QUERY BY SQL e os comandos SQL genéricos integrados aplicados a base local sempre se executam no mesmo contexto que os comandos 4D padrão.
Nota: 4D oferece a opção "Auto-commit" que pode ser utilizada para iniciar e validar as transações de forma automática ao usar os comandos SIUD (SELECT, INSERT, UPDATE e DELETE) com o propósito de preservar a integridade dos dados. Para maior informação, consulte a seção .
Os seguintes exemplos ilustram as diferentes combinações de transações.
Nem "John", nem "Smith" serão adicionados a tabela emp:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL SQL EXECUTE("START")
SQL CANCEL LOAD SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD SQL EXECUTE("ROLLBACK")
CANCEL TRANSACTION
SQL LOGOUT
Somente “John” será adicionado a tabela emp:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL INSERT INTO emp(NAME)
VALUES ('John');
End SQL SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD SQL EXECUTE("ROLLBACK")
VALIDATE TRANSACTION
SQL LOGOUT
Nem “John” nem “Smith” serão adicionados a tabela emp. A transação externa anula a transação interna:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("COMMIT")
CANCEL TRANSACTION
SQL LOGOUT
“John” e “Smith” serão adicionados a tabela emp:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("COMMIT")
VALIDATE TRANSACTION
SQL LOGOUT