{"id":15207,"date":"2023-12-29T12:31:06","date_gmt":"2023-12-29T15:31:06","guid":{"rendered":"https:\/\/categoriaoutros.com.br\/?p=15207"},"modified":"2024-01-29T12:25:48","modified_gmt":"2024-01-29T15:25:48","slug":"sql-executar-diversas-instrucoes-de-modo-que-se-uma-falhar-todas-falham","status":"publish","type":"post","link":"https:\/\/categoriaoutros.com.br\/?p=15207","title":{"rendered":"SQL:  Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham"},"content":{"rendered":"\n<p>Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.<\/p>\n\n\n\n<p>Para fazer isso, usamos uma instru\u00e7\u00e3o SQL chamada de <strong>BEGIN TRANSACTION<\/strong> que \u00e9 uma sequ\u00eancia de uma ou mais instru\u00e7\u00f5es SQL que s\u00e3o tratadas como uma \u00fanica unidade de trabalho. Isso significa que todas as opera\u00e7\u00f5es dentro do <strong>BEGIN TRANSACTION<\/strong> s\u00e3o executadas com sucesso ou nenhuma \u00e9 executada.<\/p>\n\n\n\n<p>O termo BEGIN TRANSACTION traduzido para o portugu\u00eas quer dizer, exatamente, INICIAR TRANSA\u00c7\u00c3O.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Usamos a seguinte sintaxe para <strong>BEGIN TRANSACTION<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>BEGIN TRANSACTION;<\/strong>\n\nadicione a primeira instru\u00e7\u00e3o aqui;\n\nadicione a segunda instru\u00e7\u00e3o aqui;\n\nadicione a terceira instru\u00e7\u00e3o aqui;\n\n<strong>COMMIT;<\/strong><\/code><\/pre>\n\n\n\n<p>Veja que iniciamos com <strong>BEGIN TRANSACTION;<\/strong> e terminamos com <strong>COMMIT;<\/strong> e \u00e9 apenas isso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplos usando PHP<\/h2>\n\n\n\n<p>Segue um exemplo usando PHP onde realizo 3 exclus\u00f5es:<\/p>\n\n\n\n<pre><font color=\"#CD00CD\">&lt;?php<\/font>\n\n<font color=\"#0000EE\">\/\/ Iniciar a transa\u00e7\u00e3o<\/font>\n<font color=\"#00CDCD\">mysqli_begin_transaction<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql1<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;DELETE FROM recibo where numero_recibo=&apos;<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD0000\">&apos;;&quot;<\/font>;\n<font color=\"#00CDCD\">mysqli_query<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql1<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql2<\/font> <font color=\"#AF5F00\">=<\/font>  <font color=\"#CD0000\">&quot;DELETE FROM pagamento where recibo=&apos;<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD0000\">&apos;;&quot;<\/font>;\n<font color=\"#00CDCD\">mysqli_query<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql2<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql3<\/font> <font color=\"#AF5F00\">=<\/font>  <font color=\"#CD0000\">&quot;DELETE FROM complemento where recibo=&apos;<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD0000\">&apos;;&quot;<\/font>;\n<font color=\"#00CDCD\">mysqli_query<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql3<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#00CDCD\">mysqli_commit<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n\n\n<font color=\"#CD00CD\">?&gt;<\/font><\/pre>\n\n\n\n<p>O c\u00f3digo acima \u00e9 funcional para a transa\u00e7\u00e3o de exclus\u00e3o, mas podemos torn\u00e1-lo mais robusto, melhorando a legibilidade e incorporando alguns princ\u00edpios de boas pr\u00e1ticas. H\u00e1 alguns riscos que devemos tratar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Uso de Prepared Statements:<\/strong> Recomenda-se utilizar <strong>prepared statements<\/strong> para evitar ataques de inje\u00e7\u00e3o SQL. No c\u00f3digo atual, o valor de <code>$recibo<\/code> \u00e9 diretamente interpolado nas consultas, o que pode ser arriscado.<\/li>\n\n\n\n<li><strong>Uso de Fun\u00e7\u00f5es para Reutiliza\u00e7\u00e3o de C\u00f3digo:<\/strong> vamos criar uma fun\u00e7\u00e3o para executar opera\u00e7\u00f5es de exclus\u00e3o, reduzindo a repeti\u00e7\u00e3o de c\u00f3digo.<\/li>\n\n\n\n<li><strong>Tratamento de Erros:<\/strong> podemos adicionar tratamento de erros para lidar com poss\u00edveis falhas nas consultas SQL.<\/li>\n<\/ul>\n\n\n\n<pre><font color=\"#CD00CD\">&lt;?php<\/font>\n\n<font color=\"#CD00CD\">include<\/font> <font color=\"#CD0000\">&quot;conexaoBD.php&quot;<\/font>;\n\n<font color=\"#0000EE\">\/\/ Fun\u00e7\u00e3o para execu\u00e7\u00e3o de consultas de exclus\u00e3o<\/font>\n<font color=\"#CD00CD\">function<\/font> executarExclusao<font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">tabela<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">campo<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">valor<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;DELETE FROM <\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">tabela<\/font><font color=\"#CD0000\"> WHERE <\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">campo<\/font><font color=\"#CD0000\"> = ?&quot;<\/font>;\n    <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">stmt<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#00CDCD\">mysqli_prepare<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql<\/font><font color=\"#CD00CD\">)<\/font>;\n\n    <font color=\"#AF5F00\">if<\/font> <font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">stmt<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n        <font color=\"#00CDCD\">mysqli_stmt_bind_param<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">stmt<\/font>, <font color=\"#CD0000\">&apos;s&apos;<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">valor<\/font><font color=\"#CD00CD\">)<\/font>;\n        <font color=\"#00CDCD\">mysqli_stmt_execute<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">stmt<\/font><font color=\"#CD00CD\">)<\/font>;\n        <font color=\"#00CDCD\">mysqli_stmt_close<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">stmt<\/font><font color=\"#CD00CD\">)<\/font>;\n    <font color=\"#CD00CD\">}<\/font> <font color=\"#AF5F00\">else<\/font> <font color=\"#CD00CD\">{<\/font>\n        <font color=\"#0000EE\">\/\/ Tratar erro de prepara\u00e7\u00e3o da consulta<\/font>\n        <font color=\"#AF5F00\">die<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#CD0000\">&quot;Erro ao preparar a consulta: &quot;<\/font> <font color=\"#AF5F00\">.<\/font> <font color=\"#00CDCD\">mysqli_error<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">))<\/font>;\n    <font color=\"#CD00CD\">}<\/font>\n<font color=\"#CD00CD\">}<\/font>\n\n<font color=\"#0000EE\">\/\/ N\u00famero do recibo<\/font>\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">_GET<\/font><font color=\"#CD00CD\">[<\/font><font color=\"#CD0000\">&quot;recibo&quot;<\/font><font color=\"#CD00CD\">]<\/font>;\n\n<font color=\"#0000EE\">\/\/ Iniciar a transa\u00e7\u00e3o<\/font>\n<font color=\"#00CDCD\">mysqli_begin_transaction<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#AF5F00\">try<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#0000EE\">\/\/ Executar opera\u00e7\u00f5es de exclus\u00e3o<\/font>\n    executarExclusao<font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#CD0000\">&apos;recibo&apos;<\/font>, <font color=\"#CD0000\">&apos;numero_recibo&apos;<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD00CD\">)<\/font>;\n    executarExclusao<font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#CD0000\">&apos;pagamento&apos;<\/font>, <font color=\"#CD0000\">&apos;recibo&apos;<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD00CD\">)<\/font>;\n    executarExclusao<font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font>, <font color=\"#CD0000\">&apos;complemento&apos;<\/font>, <font color=\"#CD0000\">&apos;recibo&apos;<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">recibo<\/font><font color=\"#CD00CD\">)<\/font>;\n\n    <font color=\"#0000EE\">\/\/ Commit da transa\u00e7\u00e3o<\/font>\n    <font color=\"#00CDCD\">mysqli_commit<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n\n    <font color=\"#CD00CD\">echo<\/font> <font color=\"#CD0000\">&quot;Exclus\u00f5es bem-sucedidas. Transa\u00e7\u00e3o confirmada.&quot;<\/font>;\n<font color=\"#CD00CD\">}<\/font> <font color=\"#AF5F00\">catch<\/font> <font color=\"#CD00CD\">(<\/font><font color=\"#00CDCD\">Exception<\/font> <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">e<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#0000EE\">\/\/ Rollback da transa\u00e7\u00e3o em caso de erro<\/font>\n    <font color=\"#00CDCD\">mysqli_rollback<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n    <font color=\"#CD00CD\">echo<\/font> <font color=\"#CD0000\">&quot;Erro ao excluir: &quot;<\/font> <font color=\"#AF5F00\">.<\/font> <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">e<\/font><font color=\"#00CD00\">-&gt;<\/font>getMessage<font color=\"#CD00CD\">()<\/font>;\n<font color=\"#CD00CD\">}<\/font>\n\n<font color=\"#0000EE\">\/\/ Fechar conex\u00e3o<\/font>\n<font color=\"#00CDCD\">mysqli_close<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">con<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#CD00CD\">?&gt;<\/font>\n<\/pre>\n\n\n\n<p>Acima, est\u00e1 uma vers\u00e3o que usa <strong>prepared statements<\/strong> para melhorar a seguran\u00e7a e a leitura do c\u00f3digo. Al\u00e9m disso, a fun\u00e7\u00e3o <code><strong>executarExclusao<\/strong><\/code> pode ser reutilizada para outras opera\u00e7\u00f5es de exclus\u00e3o no futuro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplos usando apenas SQL<\/h2>\n\n\n\n<p>Vejamos um exemplo usando apenas SQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Iniciar a transa\u00e7\u00e3o\nBEGIN TRANSACTION;\n\n-- Transferir fundos da conta de origem para a conta de destino\nUPDATE ContasBancarias\nSET Saldo = Saldo - 1000\nWHERE NumeroConta = '123';\n\nUPDATE ContasBancarias\nSET Saldo = Saldo + 1000\nWHERE NumeroConta = '456';\n\n-- Commit para confirmar as altera\u00e7\u00f5es\nCOMMIT;<\/code><\/pre>\n\n\n\n<p>Neste exemplo, a transa\u00e7\u00e3o garante que ambas as atualiza\u00e7\u00f5es ocorram ou nenhuma ocorra. Se algo der errado durante o processo de transfer\u00eancia, voc\u00ea pode executar um <code>ROLLBACK<\/code> para reverter as altera\u00e7\u00f5es.<\/p>\n\n\n\n<p>Segue outro exemplo,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Iniciar a transa\u00e7\u00e3o\nBEGIN TRANSACTION;\n\n-- Atualizar informa\u00e7\u00f5es do cliente\nUPDATE Clientes\nSET Nome = 'Novo Nome'\nWHERE IDCliente = 1;\n\n-- Atualizar informa\u00e7\u00f5es do pedido relacionado\nUPDATE Pedidos\nSET Status = 'Processado'\nWHERE IDCliente = 1;\n\n-- Commit para confirmar as altera\u00e7\u00f5es\nCOMMIT;<\/code><\/pre>\n\n\n\n<p>as atualiza\u00e7\u00f5es nas tabelas <code>Clientes<\/code> e <code>Pedidos<\/code> ocorrem dentro de uma \u00fanica transa\u00e7\u00e3o. Se algo der errado durante o processo de atualiza\u00e7\u00e3o, voc\u00ea pode executar um <code>ROLLBACK<\/code> para garantir que ambas as tabelas permane\u00e7am em um estado consistente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ROLLBACK em BEGIN TRANSACTION<\/h2>\n\n\n\n<p>Se algo der errado durante o processo de atualiza\u00e7\u00e3o, podemos executar um <code>ROLLBACK<\/code> para garantir que ambas as tabelas permane\u00e7am em um estado consistente.<\/p>\n\n\n\n<p>A instru\u00e7\u00e3o ROLLBACK \u00e9 usada para reverter as altera\u00e7\u00f5es realizadas durante uma transa\u00e7\u00e3o que est\u00e1 sendo processada, cancelando todas as opera\u00e7\u00f5es at\u00e9 o momento do <code>ROLLBACK<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Iniciar a transa\u00e7\u00e3o\nBEGIN TRANSACTION;\n\n-- Opera\u00e7\u00f5es dentro da transa\u00e7\u00e3o\nUPDATE Tabela1 SET Coluna1 = 'NovoValor' WHERE Condi\u00e7\u00e3o1;\nDELETE FROM Tabela2 WHERE Condi\u00e7\u00e3o2;\n\n-- Verificar se ocorreu algum erro ou condi\u00e7\u00e3o que exige o rollback\nIF <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">AlgumaCondicao<\/mark><\/em> THEN\n    -- Reverter as altera\u00e7\u00f5es e desfazer a transa\u00e7\u00e3o\n    <strong>ROLLBACK;<\/strong>\nELSE\n    -- Confirmar as altera\u00e7\u00f5es e efetuar a transa\u00e7\u00e3o\n    COMMIT;\nEND IF;<\/code><\/pre>\n\n\n\n<p>Se AlgumaCondicao for avaliada como verdadeira (indicando um problema durante a execu\u00e7\u00e3o da transa\u00e7\u00e3o), a instru\u00e7\u00e3o ROLLBACK ser\u00e1 executada.<\/p>\n\n\n\n<p>Em situa\u00e7\u00f5es reais, voc\u00ea substituiria &#8220;AlgumaCondicao&#8221; por uma express\u00e3o condicional relevante \u00e0 sua aplica\u00e7\u00e3o. Por exemplo, voc\u00ea pode usar uma verifica\u00e7\u00e3o de erro retornada pelo banco de dados, um teste de valida\u00e7\u00e3o de neg\u00f3cios ou qualquer outra condi\u00e7\u00e3o que determine se a transa\u00e7\u00e3o deve ser confirmada (<code>COMMIT<\/code>) ou revertida (<code>ROLLBACK<\/code>).<\/p>\n\n\n\n<p>Um exemplo mais pr\u00e1tico \u00e9 esse outro, onde n\u00e3o uso <em><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">AlgumaCondicao<\/mark><\/em>, mas sim uma condi\u00e7\u00e3o real.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Iniciar a transa\u00e7\u00e3o\nBEGIN TRANSACTION;\n\n-- Opera\u00e7\u00f5es dentro da transa\u00e7\u00e3o\nUPDATE Tabela1 SET Coluna1 = 'NovoValor' WHERE Condi\u00e7\u00e3o1;\nDELETE FROM Tabela2 WHERE Condi\u00e7\u00e3o2;\n\n-- Verificar se ocorreu algum erro ou condi\u00e7\u00e3o que exige o rollback\nIF <strong>@@ERROR &lt;&gt; 0<\/strong> THEN\n    -- Reverter as altera\u00e7\u00f5es e desfazer a transa\u00e7\u00e3o\n    ROLLBACK;\nELSE\n    -- Confirmar as altera\u00e7\u00f5es e efetuar a transa\u00e7\u00e3o\n    COMMIT;\nEND IF;<\/code><\/pre>\n\n\n\n<p>A condi\u00e7\u00e3o<strong> <code>@@ERROR &lt;&gt; 0<\/code><\/strong> verifica se o valor de <code>@@ERROR<\/code> \u00e9 diferente de zero, o que indica que ocorreu um erro. Se essa condi\u00e7\u00e3o for verdadeira, significa que a instru\u00e7\u00e3o SQL anterior gerou um erro<\/p>\n\n\n\n<p>Veja esse outro exemplo,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Iniciar a transa\u00e7\u00e3o\nBEGIN TRANSACTION;\n\n-- Atualizar o pre\u00e7o de um produto no pedido\nUPDATE Pedidos\nSET PrecoProduto = 150\nWHERE NumeroPedido = 123;\n\n-- Calcular o novo valor total do pedido\nUPDATE Pedidos\nSET ValorTotal = (SELECT SUM(PrecoProduto) FROM Pedidos WHERE NumeroPedido = 123)\nWHERE NumeroPedido = 123;\n\n-- Verificar se o novo valor total excede o limite permitido\nDECLARE @LimiteMaximo DECIMAL(10, 2);\nSET @LimiteMaximo = 1000.00;\n\nIF (SELECT ValorTotal FROM Pedidos WHERE NumeroPedido = 123) &gt; @LimiteMaximo\nBEGIN\n    -- Reverter as altera\u00e7\u00f5es e desfazer a transa\u00e7\u00e3o\n    ROLLBACK;\n    PRINT 'A transa\u00e7\u00e3o foi revertida devido a exceder o limite m\u00e1ximo.';\nEND\nELSE\nBEGIN\n    -- Confirmar as altera\u00e7\u00f5es e efetuar a transa\u00e7\u00e3o\n    COMMIT;\n    PRINT 'A transa\u00e7\u00e3o foi efetuada com sucesso.';\nEND;<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"141\" height=\"126\" src=\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2022\/11\/sql.png\" alt=\"Executar Diversas Instru\u00e7\u00f5es SQL\" class=\"wp-image-6195\"\/><figcaption class=\"wp-element-caption\">SQL:  Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham<\/figcaption><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">Compatibilidade de Gerenciadores de Banco de Dados (SGBD) com a Instru\u00e7\u00e3o BEGIN TRANSACTION<\/h2>\n\n\n\n<p>A instru\u00e7\u00e3o <code>BEGIN TRANSACTION<\/code> \u00e9 uma parte do padr\u00e3o SQL e, portanto, \u00e9 suportada pela maioria dos Sistemas de Gerenciamento de Banco de Dados (SGBDs) relacionais.<\/p>\n\n\n\n<p>Podemos citar alguns SGBD:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MariaDB<\/strong><\/li>\n\n\n\n<li><strong>MySQL<\/strong><\/li>\n\n\n\n<li><strong>PostgreSQL<\/strong><\/li>\n\n\n\n<li><strong>Microsoft SQL Server<\/strong><\/li>\n\n\n\n<li><strong>Oracle Database<\/strong><\/li>\n\n\n\n<li><strong>SQLite<\/strong><\/li>\n<\/ul>\n\n\n\n<p>A forna de usar a instru\u00e7\u00e3o pode variar entre esses SGBDs. Vamos ver alguns exemplos:<\/p>\n\n\n\n<p>No <strong>MariaDB<\/strong> usamos assim,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN;\n-- ou\nSTART TRANSACTION;<\/code><\/pre>\n\n\n\n<p>No <strong>Microsoft SQL Server<\/strong> usamos apenas isso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN TRANSACTION;<\/code><\/pre>\n\n\n\n<p>No <strong><strong>MySQL<\/strong><\/strong>, al\u00e9m da forma completa, podemos usar START TRANSACTION.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN;\n-- ou\nSTART TRANSACTION;<\/code><\/pre>\n\n\n\n<p>No<strong>PostgreSQL<\/strong> usamos apenas isso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN;<\/code><\/pre>\n\n\n\n<p>No <strong><strong>Oracle Database<\/strong><\/strong> usamos apenas isso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN;<\/code><\/pre>\n\n\n\n<p>No <strong>SQLite<\/strong> usamos apenas isso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN;<\/code><\/pre>\n\n\n\n<p>Em todos esses casos, a instru\u00e7\u00e3o <code>BEGIN TRANSACTION<\/code> ou uma forma equivalente \u00e9 usada para iniciar uma transa\u00e7\u00e3o no banco de dados.<\/p>\n\n\n\n<p><a href=\"https:\/\/categoriaoutros.com.br\/?s=SQL\">Clique aqui para ver outros posts sobre SQL.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo de &#8220;BEGIN TRANSACTION;&#8221; em PHP<\/h2>\n\n\n\n<pre><font color=\"#CD00CD\">&lt;?php<\/font>\n<font color=\"#0000EE\">\/\/ Conectar ao banco de dados<\/font>\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">servername<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;seu_servidor&quot;<\/font>;\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">username<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;seu_usuario&quot;<\/font>;\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">password<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;sua_senha&quot;<\/font>;\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">dbname<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;seu_banco_de_dados&quot;<\/font>;\n\n<font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#00CDCD\">mysqli_connect<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">servername<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">username<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">password<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">dbname<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#0000EE\">\/\/ Verificar a conex\u00e3o<\/font>\n<font color=\"#AF5F00\">if<\/font> <font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">!$<\/font><font color=\"#00CDCD\">conn<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#AF5F00\">die<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#CD0000\">&quot;Falha na conex\u00e3o: &quot;<\/font> <font color=\"#AF5F00\">.<\/font> <font color=\"#00CDCD\">mysqli_connect_error<\/font><font color=\"#CD00CD\">())<\/font>;\n<font color=\"#CD00CD\">}<\/font>\n\n<font color=\"#0000EE\">\/\/ Iniciar a transa\u00e7\u00e3o<\/font>\n<font color=\"#00CDCD\">mysqli_begin_transaction<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font><font color=\"#CD00CD\">)<\/font>;\n\n<font color=\"#AF5F00\">try<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#0000EE\">\/\/ Opera\u00e7\u00f5es dentro da transa\u00e7\u00e3o<\/font>\n    <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql1<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;UPDATE Tabela1 SET Coluna1 = &apos;NovoValor&apos; WHERE Condi\u00e7\u00e3o1&quot;<\/font>;\n    <font color=\"#00CDCD\">mysqli_query<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql1<\/font><font color=\"#CD00CD\">)<\/font>;\n\n    <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql2<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">&quot;DELETE FROM Tabela2 WHERE Condi\u00e7\u00e3o2&quot;<\/font>;\n    <font color=\"#00CDCD\">mysqli_query<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font>, <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">sql2<\/font><font color=\"#CD00CD\">)<\/font>;\n\n    <font color=\"#0000EE\">\/\/ Simular uma condi\u00e7\u00e3o que exige rollback<\/font>\n    <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">algumaCondicao<\/font> <font color=\"#AF5F00\">=<\/font> <font color=\"#CD0000\">false<\/font>;\n    <font color=\"#AF5F00\">if<\/font> <font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">algumaCondicao<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n        <font color=\"#0000EE\">\/\/ Lan\u00e7ar uma exce\u00e7\u00e3o para simular um erro<\/font>\n        <font color=\"#AF5F00\">throw<\/font> <font color=\"#CD00CD\">new<\/font> <font color=\"#00CDCD\">Exception<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#CD0000\">&quot;Condi\u00e7\u00e3o que exige rollback.&quot;<\/font><font color=\"#CD00CD\">)<\/font>;\n    <font color=\"#CD00CD\">}<\/font>\n\n    <font color=\"#0000EE\">\/\/ Confirmar as altera\u00e7\u00f5es e efetuar a transa\u00e7\u00e3o<\/font>\n    <font color=\"#00CDCD\">mysqli_commit<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font><font color=\"#CD00CD\">)<\/font>;\n    <font color=\"#CD00CD\">echo<\/font> <font color=\"#CD0000\">&quot;Transa\u00e7\u00e3o efetuada com sucesso.&quot;<\/font>;\n<font color=\"#CD00CD\">}<\/font> <font color=\"#AF5F00\">catch<\/font> <font color=\"#CD00CD\">(<\/font><font color=\"#00CDCD\">Exception<\/font> <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">e<\/font><font color=\"#CD00CD\">)<\/font> <font color=\"#CD00CD\">{<\/font>\n    <font color=\"#0000EE\">\/\/ Reverter as altera\u00e7\u00f5es e desfazer a transa\u00e7\u00e3o em caso de exce\u00e7\u00e3o<\/font>\n    <font color=\"#00CDCD\">mysqli_rollback<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font><font color=\"#CD00CD\">)<\/font>;\n    <font color=\"#CD00CD\">echo<\/font> <font color=\"#CD0000\">&quot;A transa\u00e7\u00e3o foi revertida devido a um erro: &quot;<\/font> <font color=\"#AF5F00\">.<\/font> <font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">e<\/font><font color=\"#00CD00\">-&gt;<\/font>getMessage<font color=\"#CD00CD\">()<\/font>;\n<font color=\"#CD00CD\">}<\/font>\n\n<font color=\"#0000EE\">\/\/ Fechar a conex\u00e3o<\/font>\n<font color=\"#00CDCD\">mysqli_close<\/font><font color=\"#CD00CD\">(<\/font><font color=\"#AF5F00\">$<\/font><font color=\"#00CDCD\">conn<\/font><font color=\"#CD00CD\">)<\/font>;\n<font color=\"#CD00CD\">?&gt;<\/font>\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado. Para fazer isso, usamos uma instru\u00e7\u00e3o SQL chamada de BEGIN TRANSACTION que \u00e9 uma sequ\u00eancia de uma ou mais instru\u00e7\u00f5es SQL que s\u00e3o tratadas como uma \u00fanica unidade de trabalho. Isso significa que&#8230;<\/p>\n<p class=\"more-link-wrap\"><a href=\"https:\/\/categoriaoutros.com.br\/?p=15207\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &ldquo;SQL:  Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham&rdquo;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1331],"tags":[4769,4770,3211],"class_list":["post-15207","post","type-post","status-publish","format-standard","hentry","category-banco-de-dados","tag-begin-transaction","tag-rollback","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros<\/title>\n<meta name=\"description\" content=\"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/categoriaoutros.com.br\/?p=15207\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros\" \/>\n<meta property=\"og:description\" content=\"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/categoriaoutros.com.br\/?p=15207\" \/>\n<meta property=\"og:site_name\" content=\"Categoria Outros\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/categoriaoutros\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-29T15:31:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-29T15:25:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2022\/11\/sql.png\" \/>\n<meta name=\"author\" content=\"Categoria: Outros\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:site\" content=\"@CategoriaOutros\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Categoria: Outros\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207#article\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207\"},\"author\":{\"name\":\"Categoria: Outros\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\"},\"headline\":\"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham\",\"datePublished\":\"2023-12-29T15:31:06+00:00\",\"dateModified\":\"2024-01-29T15:25:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207\"},\"wordCount\":714,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"keywords\":[\"BEGIN TRANSACTION\",\"ROLLBACK\",\"sql\"],\"articleSection\":[\"Banco de Dados\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=15207#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207\",\"url\":\"https:\/\/categoriaoutros.com.br\/?p=15207\",\"name\":\"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros\",\"isPartOf\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\"},\"datePublished\":\"2023-12-29T15:31:06+00:00\",\"dateModified\":\"2024-01-29T15:25:48+00:00\",\"description\":\"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.\",\"breadcrumb\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/categoriaoutros.com.br\/?p=15207\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/categoriaoutros.com.br\/?p=15207#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/categoriaoutros.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#website\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"name\":\"Categoria Outros\",\"description\":\"Assuntos Diversos\",\"publisher\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/categoriaoutros.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#organization\",\"name\":\"Categoria Outros\",\"alternateName\":\"Categoria Outros\",\"url\":\"https:\/\/categoriaoutros.com.br\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"contentUrl\":\"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg\",\"width\":400,\"height\":400,\"caption\":\"Categoria Outros\"},\"image\":{\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/categoriaoutros\",\"https:\/\/twitter.com\/CategoriaOutros\",\"https:\/\/br.pinterest.com\/CategoriaOutros\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40\",\"name\":\"Categoria: Outros\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g\",\"caption\":\"Categoria: Outros\"},\"sameAs\":[\"http:\/\/categoriaoutros.com.br\"],\"url\":\"https:\/\/categoriaoutros.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros","description":"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/categoriaoutros.com.br\/?p=15207","og_locale":"pt_BR","og_type":"article","og_title":"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros","og_description":"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.","og_url":"https:\/\/categoriaoutros.com.br\/?p=15207","og_site_name":"Categoria Outros","article_publisher":"https:\/\/www.facebook.com\/categoriaoutros","article_published_time":"2023-12-29T15:31:06+00:00","article_modified_time":"2024-01-29T15:25:48+00:00","og_image":[{"url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2022\/11\/sql.png"}],"author":"Categoria: Outros","twitter_card":"summary_large_image","twitter_creator":"@CategoriaOutros","twitter_site":"@CategoriaOutros","twitter_misc":{"Escrito por":"Categoria: Outros","Est. tempo de leitura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/categoriaoutros.com.br\/?p=15207#article","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/?p=15207"},"author":{"name":"Categoria: Outros","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40"},"headline":"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham","datePublished":"2023-12-29T15:31:06+00:00","dateModified":"2024-01-29T15:25:48+00:00","mainEntityOfPage":{"@id":"https:\/\/categoriaoutros.com.br\/?p=15207"},"wordCount":714,"commentCount":0,"publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"keywords":["BEGIN TRANSACTION","ROLLBACK","sql"],"articleSection":["Banco de Dados"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/categoriaoutros.com.br\/?p=15207#respond"]}]},{"@type":"WebPage","@id":"https:\/\/categoriaoutros.com.br\/?p=15207","url":"https:\/\/categoriaoutros.com.br\/?p=15207","name":"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham - Categoria Outros","isPartOf":{"@id":"https:\/\/categoriaoutros.com.br\/#website"},"datePublished":"2023-12-29T15:31:06+00:00","dateModified":"2024-01-29T15:25:48+00:00","description":"Hoje iremos ver como usar SQL para executar diversas instru\u00e7\u00f5es de modo que se uma falhar todas Falham e nada ser\u00e1 alterado.","breadcrumb":{"@id":"https:\/\/categoriaoutros.com.br\/?p=15207#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/categoriaoutros.com.br\/?p=15207"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/categoriaoutros.com.br\/?p=15207#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/categoriaoutros.com.br\/"},{"@type":"ListItem","position":2,"name":"SQL: Executar Diversas Instru\u00e7\u00f5es de Modo que Se uma Falhar Todas Falham"}]},{"@type":"WebSite","@id":"https:\/\/categoriaoutros.com.br\/#website","url":"https:\/\/categoriaoutros.com.br\/","name":"Categoria Outros","description":"Assuntos Diversos","publisher":{"@id":"https:\/\/categoriaoutros.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/categoriaoutros.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/categoriaoutros.com.br\/#organization","name":"Categoria Outros","alternateName":"Categoria Outros","url":"https:\/\/categoriaoutros.com.br\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","contentUrl":"https:\/\/categoriaoutros.com.br\/wp-content\/uploads\/2023\/08\/categoriaoutros-logo.jpg","width":400,"height":400,"caption":"Categoria Outros"},"image":{"@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/categoriaoutros","https:\/\/twitter.com\/CategoriaOutros","https:\/\/br.pinterest.com\/CategoriaOutros\/"]},{"@type":"Person","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/ba0f432708449436912bd6736864bb40","name":"Categoria: Outros","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/categoriaoutros.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed97775f0ab50750ed638ed3417ea85e19ced2c648da167a108e393ae5fd9e33?s=96&d=mm&r=g","caption":"Categoria: Outros"},"sameAs":["http:\/\/categoriaoutros.com.br"],"url":"https:\/\/categoriaoutros.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/15207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15207"}],"version-history":[{"count":10,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/15207\/revisions"}],"predecessor-version":[{"id":15503,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=\/wp\/v2\/posts\/15207\/revisions\/15503"}],"wp:attachment":[{"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/categoriaoutros.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}