navicatは関数解決方法を作成できません。


初めてMySQL FUNTIONを書きました。ずっと間違えました。
Err]1064-You have an error in your SQL syntax;check the manaual that cores ponds to your MySQL server sion for the right sntax to use near'company_id`int)RETURNS varhar(20)CHARSET utf 8
BEGIN
本来の関数:

CREATE DEFINER=`33323`@`%` FUNCTION `createSaleCode`(`benginStr` varchar,`company_id` int) RETURNS varchar(20) CHARSET utf8 
BEGIN 
  DECLARE nearnum VARCHAR(20);  
 DECLARE nowdatepre VARCHAR(20); 
 DECLARE numout VARCHAR(20);  
 SELECT a.sale_code INTO nearnum FROM d_sale a WHERE a.company_id = company_id ORDER BY a.sale_id DESC limit 1; 
 SELECT concat(extract(year_month from now()),LPAD(extract(day from now()), 2, 0)) INTO nowdatepre; 
 IF locate(nowdatepre,nearnum)>0  
  THEN  
    set numout = nearnum +1;   
  ELSE  
    set numout = concat(beginStr,nowdatepre,'00001');  
  END IF; 
 RETURN numout; 
END 
この関数はNavicatでは実行できません。何度か試した後、コードを以下に修正します。

delimiter $$ 
CREATE DEFINER=`12212`@`%` FUNCTION createSaleCode(benginStr varchar(20),company_id int(11) ) RETURNS varchar(20) CHARSET utf8 
BEGIN 
  DECLARE nearnum VARCHAR(20);  
 DECLARE nowdatepre VARCHAR(20); 
 DECLARE numout VARCHAR(20);  
 SELECT a.sale_code INTO nearnum FROM d_sale a WHERE a.company_id = company_id ORDER BY a.sale_id DESC limit 1; 
 SELECT concat(extract(year_month from now()),LPAD(extract(day from now()), 2, 0)) INTO nowdatepre; 
 IF locate(nowdatepre,nearnum)>0  
  THEN  
    set numout = nearnum +1;   
  ELSE  
    set numout = concat(beginStr,nowdatepre,'00001');  
  END IF; 
 RETURN numout; 
END$$ 
delimiter ; 
問題が解決する。
デフォルトでは、delimiterはセミコロンです。
締め括りをつける
以上は本文のnavicatについて関数解決方法を作成できません。興味のある方はこのサイトを参照してください。RedisとMySQLの違いを簡単に説明します。MYSQLサブクエリとネストクエリの最適化例解析いくつかの比較的重要なMySQL変数など、何か問題があればいつでもメッセージを残してください。友達のサポートに感謝します。