56,677
社区成员
发帖
与我相关
我的任务
分享
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$$
insert into num select count(*)from c_commcs where ncslx=7 and scsmc=trim(v_txmmc);