MySQL : Операторы IF / THEN в хранимых процедурах

Я пишу хранимую процедуру, которая использует несколько операторов IF / THEN, которые также должны выполнять несколько запросов, если они оцениваются как истинные. Проблема в том, что я не могу найти никаких примеров подходящего синтаксиса. Из руководства разработчика MySQL кажется, что у меня могло быть несколько запросов в «списке_операторов», но пока я не могу заставить его работать.

Вот что я пытаюсь сделать:

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

IF agency IS NULL THEN 
  -- 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 IF;

Ошибка:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с 'IF agency IS NULL THEN Проблема в том, что я не могу найти никаких примеров подходящего синтаксиса. Из руководства разработчика MySQL кажется, что у меня могло быть несколько запросов в «списке_операторов», но пока я не могу заставить его работать.

Вот что я пытаюсь сделать:

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

IF agency IS NULL THEN 
  -- 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 IF;

Ошибка:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с 'IF agency IS NULL THEN Проблема в том, что я не могу найти никаких примеров подходящего синтаксиса. Из руководства разработчика MySQL кажется, что у меня могло быть несколько запросов в «списке_операторов», но пока я не могу заставить его работать.

Вот что я пытаюсь сделать:

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

IF agency IS NULL THEN 
  -- 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 IF;

Ошибка:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с 'IF agency IS NULL THEN ВСТАВИТЬ INTO orgs (org_name, org_name_length, org_type, ' в строке 53

Есть идеи? Я знаю, что это должно быть что-то простое, поэтому буду очень признателен за любой вклад.

11
задан Johan - reinstate Monica 12 May 2011 в 20:07
поделиться