急,MySQL存储过程错误

kerisyml 2008-03-12 02:33:04
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)

...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
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$$
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
也就是你的结尾少了一个 end if 加上就没问题了
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
去掉那个else if 就没有问题喽
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
看错了
应该是你的else if的问题
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
insert into num select count(*)from c_commcs where ncslx=7 and scsmc=trim(v_txmmc);
rainbowliuliang 2008-03-12
  • 打赏
  • 举报
回复
select count(*) into num from c_commcs where ncslx=7 and scsmc=trim(v_txmmc);

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧