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

Jak używać etykiety goto w funkcji przechowywanej MySQL

Są przypadki GOTO, których nie można zaimplementować w MySQL, jak przeskakiwanie kodu wstecz (i to też dobrze).

Ale dla czegoś takiego jak twój przykład, w którym chcesz przeskoczyć ze wszystkiego do końcowej serii instrukcji, możesz utworzyć blok BEGIN / END otaczający kod, z którego chcesz wyskoczyć:

aBlock:BEGIN
    if (action = 'D') then
        if (rowcount > 0) then
            DELETE FROM datatable WHERE id = 2;      
        else
           SET p=CONCAT('Can not delete',@b);
           LEAVE aBlock;
        end if;
    end if;
END aBlock;
return 0;

Ponieważ twój kod to tylko niektóre zagnieżdżone elementy IF, konstrukcja jest w danym kodzie niepotrzebna. Jednak bardziej sensownym rozwiązaniem dla LOOP/WHILE/REPEAT jest uniknięcie wielu instrukcji RETURN z wnętrza pętli i skonsolidowanie przetwarzania końcowego (trochę jak TRY / FINALLY).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. get_result() nie działa, nawet jeśli włączony jest mysqlnd

  2. Dlaczego MySQL używa niewłaściwego indeksu?

  3. Jak ustawić limit czasu połączenia w zależności od logowania użytkownika w MySQL?

  4. Pobierz nazwę kolumny, która ma maksymalną wartość w wierszu sql

  5. Czy mysql_real_escape_string() i mysql_escape_string() są wystarczające do zapewnienia bezpieczeństwa aplikacji?