Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:оператори IF / THEN в съхранени процедури

Имате няколко проблема, доколкото виждам:

  1. Както посочи Дейвид, всеки израз трябва да бъде прекратен с ;
  2. Ако направите SELECT , по-добре се уверете, че може да избере само една стойност, като направите LIMIT 1; Ако имате агрегатна функция като min() тогава може да излезе само една стойност.
  3. Ако пишете процедурата с помощта на CREATE PROCEDURE ... синтаксис, не забравяйте да зададете DELIMITER $$ преди CREATE PROCEDURE ... END $$ тяло и DELIMITER ; след.
  4. Ако имате няколко оператора във вашия IF THEN ... END IF блок, добра идея е да ги поставите в BEGIN ... END; блокирай.
  5. Ако имате върната стойност, като агенция тук, защо не я направите FUNCTION name (arg1: INTEGER) RETURNS INTEGER вместо PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER) . Функцията е много по-гъвкава.
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. 1093 Грешка в MySQL таблицата е посочена два пъти

  2. Добра практика за разделяне на данни в множество бази данни?

  3. parse.com алтернативи с отворен код за бекенда

  4. Mysql - Как да търсите 26 записа, всеки от които започва с буквата на азбуката?

  5. MySQL обобщена таблица с динамични заглавки, базирани на данни от една колона