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

MySQL:instrukcje IF / THEN w procedurach składowanych

O ile widzę, masz kilka problemów:

  1. Jak zauważył David, każda instrukcja musi być zakończona znakiem ;
  2. Jeśli wykonasz SELECT , lepiej upewnij się, że może wybrać tylko jedną wartość, wykonując LIMIT 1; Jeśli masz funkcję agregującą, taką jak min() wtedy może pojawić się tylko jedna wartość.
  3. Jeśli piszesz procedurę za pomocą CREATE PROCEDURE ... składnia, nie zapomnij ustawić DELIMITER $$ przed CREATE PROCEDURE ... END $$ body i DELIMITER ; po.
  4. Jeśli masz wiele instrukcji w swoim IF THEN ... END IF bloku, dobrym pomysłem jest umieszczenie ich wewnątrz BEGIN ... END; blokować.
  5. Jeśli masz wartość zwracaną, jak tutaj agencja, dlaczego nie ustawić jej jako FUNCTION name (arg1: INTEGER) RETURNS INTEGER zamiast nazwy PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER) . Funkcja jest znacznie bardziej wszechstronna.
DELIMITER $$
CREATE PROCEDURE name(arg1 INTEGER, arg2 INTEGER, ...)
BEGIN

  SELECT SET agency = 
    COALESCE((SELECT org_agency_o_id 
            FROM orgs_agencies 
            WHERE org_agency_code = maj_agency_cat) LIMIT 1,
    (SELECT min(org_id) FROM orgs     
    WHERE org_name LIKE CONCAT('U.S.',SUBSTRING(maj_agency_cat,5)))); 

  IF agency IS NULL THEN BEGIN
    -- execute multiple queries   
    INSERT INTO orgs (org_name
                     ,org_name_length
                     ,org_type
                     ,org_sub_types) 
    VALUES (CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5))
           ,LENGTH(CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
           ,'org','Org,GovernmentEntity,Federal,Agency');

    SET agency = LAST_INSERT_ID();
  END; END IF;
END $$

DELIMITER ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy dynamiczne zapytania mysql z kodem ucieczki sql są tak samo bezpieczne, jak przygotowane instrukcje?

  2. koncepcja rezerwacji pokoju hotelowego online w php

  3. Jak znaleźć wszystkie relacje między wszystkimi tabelami mysql?

  4. Znajdź brakujące daty i dodaj je do wyniku - MySql

  5. Jak mogę streścić przygotowane instrukcje mysqli w PHP?