Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wywołanie procedury wewnątrz funkcji wyrzuca MySQL ERROR 1422

Istnieje wiele instrukcji, które powodują niejawne zatwierdzenie i żadna z nich nie może być użyta wewnątrz funkcji składowanej lub wyzwalacza, lub w procedurze składowanej, która jest wywoływana z funkcji składowanej lub wyzwalacza, ponieważ tak naprawdę nie różni się to efektem netto.

Chwila refleksji wyjaśnia przyczynę takiego stanu rzeczy:przechowywane funkcje (i wyzwalacze) są wykonywane podczas wykonywania zapytania . Zawsze, bez wyjątku, rozpoczynają wykonywanie po rozpoczęciu zapytania i kończą wykonywanie przed zakończeniem zapytania. Mogą również działać wiele razy podczas wykonywania pojedynczego zapytania, szczególnie gdy zapytanie obejmuje wiele wierszy.

W tym świetle nie miałoby sensu, gdyby było możliwe COMMIT transakcja podczas wykonywania pojedynczego zapytania... i właśnie to START TRANSACTION robi, jeśli transakcja jest uruchomiona - domyślnie zatwierdza bieżącą transakcję i rozpoczyna nową.

Jest to w porządku w procedurze składowanej, o ile nie wywołujesz jej w środku innego zapytania (za pośrednictwem funkcji składowanej lub wyzwalacza, co jest jedynym sposobem na wywołanie procedury w środku innego zapytania), ale robisz to, co nie jest obsługiwane... nawet jeśli nie jest uruchomiona transakcja, nadal nie jest możliwe rozpoczęcie transakcji w środku uruchomionego zapytania.

http://dev.mysql.com/doc/refman /5.6/pl/implicit-commit.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz więcej niż 3 dane z mysql do pola wyboru

  2. Wymień wszystkie tabele zawierające podaną nazwę kolumny

  3. Rails 3 ActiveRecord:Uporządkuj według skojarzeń

  4. Laravel SQLSTATE[22007]:Nieprawidłowy format daty i godziny:1292 Nieprawidłowa wartość daty i godziny:„2019-03-10 02:00:39” dla kolumny „updated_at” (czas letni?)

  5. Błędne wyjście MySQL z klauzulą ​​IN i parametrem