delimiter $$;
DROP PROCEDURE IF EXISTS proc_s_txm $$
CREATE PROCEDURE proc_s_txm
(
    IN p_txm      VARCHAR(16),           -- 条形码
    OUT x_txmlb      VARCHAR(1),     -- 条码类别(0-无; 1-整机条码; 2-PKG条码; 3-部件条码; 4-模块条码)   
    OUT         x_mkzldm     varchar(2),     -- 模块种类代码(4)
    OUT         x_mkzlmc     varchar(128),     -- 模块种类名称(4)    
    OUT         x_bjlbdm     varchar(2),     -- 部件类别代码(3)
    OUT         x_bjlbmc     varchar(128),     -- 部件类别名称(3)
    OUT         x_bjlx       varchar(2),     -- 部件类型(3)
    OUT         x_lxmc       varchar(20),     -- 类型名称(3)
    OUT         x_bxq      varchar(2),            -- 部件保修期(3)
    OUT         x_bjpz      varchar(2),     -- 部件品种代码(3)
    OUT         x_pzmc      varchar(20),     -- 部件品种名称(3)   
    OUT v_pkgjgfsdm  varchar(2),     -- PKG加工方式代码(2)
    OUT v_pkgjgfsmc  varchar(128),     -- PKG加工方式名称(2)
    OUT v_pkgzldm    varchar(2),     -- PKG板种类代码(2)
    OUT v_pkgzlmc    varchar(128),     -- PKG板种类名称(2)
    OUT v_pkgbbh     varchar(6),     -- PKG板版本号(2)  
    OUT         x_zjmc      VARCHAR(8)     -- 整机名称(1)   
)
BEGIN
  -- 变量定义
  declare   v_txmmc   varchar(8);      -- 条形码前8位(用来判断)
  declare   num       int;             -- 数量  
  -- 条形码不为16位,则直接返回
  if length(p_txm) <> 16 then
    set x_txmlb = '0';
  
  else
    -- 取出条形码的前8位
    set v_txmmc = substr(p_txm,1,8);
    
    
    
    -- 判断是否是模块条码(前三位是MMM)
    if substr(v_txmmc,1,3)='MMM' then
      set x_txmlb = '4';
      -- 取出模块种类代码以及模块名称
      select scsdm,scsmc into x_mkzldm,x_mkzlmc from c_commcs where ncslx=2 and scsdm=substr(v_txmmc,4,2);
    
    -- 判断是否是部件条码(前两位存储于数据库中;第三位是空格符)
    else if (substr(v_txmmc,3,1) = ' ') and (substr(v_txmmc,6,1) = '-') then
      select count(*) into num from c_commcs where ncslx=1 and scsdm=substr(v_txmmc,1,2);
      if num=1 then
        set x_txmlb = '3';
        -- 取出部件类别参数
        select scsdm,scsmc into x_bjlbdm,x_bjlbmc from c_commcs where ncslx=1 and scsdm=substr(v_txmmc,1,2);
        -- 取出部件类型参数(部件类型代码、类型名称、保修期限)
        select sbjlx,slxmc,sbxq into x_bjlx,x_lxmc,x_bxq from c_bjlx where sbjlx=substr(v_txmmc,4,2);
        -- 取出部件品种参数(部件品种名称)
        select sbjpz,spzmc into x_bjpz,x_pzmc from c_bjpz where sbjlx=substr(v_txmmc,4,2) and sbjpz=substr(v_txmmc,7,2);
      else
        set x_txmlb = '0';
      end if;
    
  
    else
      -- 判断是否是PKG板
      if (func_IsNum(substr(v_txmmc,1,1))=1) and (func_IsNum(substr(v_txmmc,5,7))=1) then
        set x_txmlb = '2';
        -- 取出PKG加工方式参数
        select scsdm,scsmc into v_pkgjgfsdm,v_pkgjgfsmc from c_commcs where ncslx=3 and scsdm=substr(v_txmmc,1,1);
        -- 取出PKG板种类参数
        select scsdm,scsmc into v_pkgzldm,v_pkgzlmc from c_commcs where ncslx=4 and scsdm=substr(v_txmmc,2,3);
        -- 取出PKG版本号
        set v_pkgbbh = 'V '||substr(v_txmmc,5,1)||'.'||substr(v_txmmc,6,2);    
      end if;
    
      -- 判断是否是整机产品条形码
      select count(*) into num from c_commcs where ncslx=7 and scsmc=trim(v_txmmc);
      if num=1 then
        set x_txmlb='1';
        set x_zjmc=trim(v_txmmc);
      else
        set x_txmlb = '0';
      end if;
    end if;      
    
  end if;END$$DELIMITER ;$$
运行后,提示如下错误:
错误代码: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 80
(耗费 0 ms)

解决方案 »

  1.   

    select count(*) into num from c_commcs where ncslx=7 and scsmc=trim(v_txmmc); 
      

  2.   

    insert into num select count(*)from c_commcs where ncslx=7 and scsmc=trim(v_txmmc);
      

  3.   

    看错了
    应该是你的else if的问题
      

  4.   

    去掉那个else if 就没有问题喽
      

  5.   

    也就是你的结尾少了一个 end if 加上就没问题了
      

  6.   

    DROP PROCEDURE IF EXISTS proc_s_txm $$ 
    CREATE PROCEDURE proc_s_txm 

        IN p_txm      VARCHAR(16),           -- 条形码 
        OUT x_txmlb      VARCHAR(1),     -- 条码类别(0-无; 1-整机条码; 2-PKG条码; 3-部件条码; 4-模块条码)    
        OUT         x_mkzldm     varchar(2),     -- 模块种类代码(4) 
        OUT         x_mkzlmc     varchar(128),     -- 模块种类名称(4)     
        OUT         x_bjlbdm     varchar(2),     -- 部件类别代码(3) 
        OUT         x_bjlbmc     varchar(128),     -- 部件类别名称(3) 
        OUT         x_bjlx       varchar(2),     -- 部件类型(3) 
        OUT         x_lxmc       varchar(20),     -- 类型名称(3) 
        OUT         x_bxq      varchar(2),            -- 部件保修期(3) 
        OUT         x_bjpz      varchar(2),     -- 部件品种代码(3) 
        OUT         x_pzmc      varchar(20),     -- 部件品种名称(3)    
        OUT v_pkgjgfsdm  varchar(2),     -- PKG加工方式代码(2) 
        OUT v_pkgjgfsmc  varchar(128),     -- PKG加工方式名称(2) 
        OUT v_pkgzldm    varchar(2),     -- PKG板种类代码(2) 
        OUT v_pkgzlmc    varchar(128),     -- PKG板种类名称(2) 
        OUT v_pkgbbh     varchar(6),     -- PKG板版本号(2)   
        OUT         x_zjmc      VARCHAR(8)     -- 整机名称(1)    

    BEGIN 
      -- 变量定义 
      declare   v_txmmc   varchar(8);      -- 条形码前8位(用来判断) 
      declare   num       int;             -- 数量   
      -- 条形码不为16位,则直接返回 
      if length(p_txm)  <>  16 then 
        set x_txmlb = '0'; 
       
      else 
        -- 取出条形码的前8位 
        set v_txmmc = substr(p_txm,1,8); 
         
         
         
        -- 判断是否是模块条码(前三位是MMM) 
        if substr(v_txmmc,1,3)='MMM' then 
          set x_txmlb = '4'; 
          -- 取出模块种类代码以及模块名称 
          select scsdm,scsmc into x_mkzldm,x_mkzlmc from c_commcs where ncslx=2 and scsdm=substr(v_txmmc,4,2); 
         
        -- 判断是否是部件条码(前两位存储于数据库中;第三位是空格符) 
        else if (substr(v_txmmc,3,1) = ' ') and (substr(v_txmmc,6,1) = '-') then 
          select count(*) into num from c_commcs where ncslx=1 and scsdm=substr(v_txmmc,1,2); 
          if num=1 then 
            set x_txmlb = '3'; 
            -- 取出部件类别参数 
            select scsdm,scsmc into x_bjlbdm,x_bjlbmc from c_commcs where ncslx=1 and scsdm=substr(v_txmmc,1,2); 
            -- 取出部件类型参数(部件类型代码、类型名称、保修期限) 
            select sbjlx,slxmc,sbxq into x_bjlx,x_lxmc,x_bxq from c_bjlx where sbjlx=substr(v_txmmc,4,2); 
            -- 取出部件品种参数(部件品种名称) 
            select sbjpz,spzmc into x_bjpz,x_pzmc from c_bjpz where sbjlx=substr(v_txmmc,4,2) and sbjpz=substr(v_txmmc,7,2); 
          else 
            set x_txmlb = '0'; 
          end if; 
         
       
        else 
          -- 判断是否是PKG板 
          if (func_IsNum(substr(v_txmmc,1,1))=1) and (func_IsNum(substr(v_txmmc,5,7))=1) then 
            set x_txmlb = '2'; 
            -- 取出PKG加工方式参数 
            select scsdm,scsmc into v_pkgjgfsdm,v_pkgjgfsmc from c_commcs where ncslx=3 and scsdm=substr(v_txmmc,1,1); 
            -- 取出PKG板种类参数 
            select scsdm,scsmc into v_pkgzldm,v_pkgzlmc from c_commcs where ncslx=4 and scsdm=substr(v_txmmc,2,3); 
            -- 取出PKG版本号 
            set v_pkgbbh = 'V ' ||substr(v_txmmc,5,1) ||'.' ||substr(v_txmmc,6,2);     
          end if; 
         
          -- 判断是否是整机产品条形码 
          select count(*) into num from c_commcs where ncslx=7 and scsmc=trim(v_txmmc); 
          if num=1 then 
            set x_txmlb='1'; 
            set x_zjmc=trim(v_txmmc); 
          else 
            set x_txmlb = '0'; 
          end if; 
        end if;       
       end if;
      end if; END$$