可以这样修改,达梦具体语法可参考DM sql程序设计手册
CREATE PROCEDURE GetSequenceNumber(Code2 varchar(10), ReturnStr OUT varchar(50))
AS
DECLARE
Count int DEFAULT 1;
NewValue2 varchar(20);
CurrentDate2 varchar(8);
Prefix2 varchar(20);
DateType2 varchar(8);
Infix2 varchar(5);
Suffix2 varchar(5);
MaxIndex2 int;
IndexLength2 tinyint;
MaxDate2 varchar(8);
len2 varchar(8);
MaxIndex3 varchar(255);
BEGIN
SELECT Prefix,Infix,Suffix,DateType,MaxDate,MaxIndex,IndexLength
INTO Prefix2,Infix2,Suffix2,DateType2,MaxDate2,MaxIndex2,IndexLength2
FROM SequenceNumber WHERE Code=Code2 FOR UPDATE;
SET CurrentDate2= SUBSTRING(date_format(now(),‘%Y%m%d’),
CASE SubString(DateType2, 1, 4)
WHEN ‘yyyy’ THEN 1
WHEN ‘yyy’ THEN 2
ELSE 3
END, LENGTH(DateType2));
IF (CurrentDate2 = MaxDate2) THEN
SET MaxIndex2 = MaxIndex2 + Count;
ELSE
SET MaxIndex2 = Count;
END IF;
IF(MaxIndex2 >= POWER(10, IndexLength2)) THEN
SET IndexLength2 = IndexLength2 + 1;
END IF;
Update SequenceNumber SET MaxDate = CurrentDate2, MaxIndex=MaxIndex2 WHERE Code=Code2;
COMMIT;
SET len2 =(IndexLength2 - LENGTH(MaxIndex2));
CASE len2
WHEN 0 THEN
SET MaxIndex3 =MaxIndex2;
WHEN 1 THEN
SET MaxIndex3 =CONCAT(‘0’,MaxIndex2);
WHEN 2 THEN
SET MaxIndex3 =CONCAT(‘00’,MaxIndex2);
WHEN 3 THEN
SET MaxIndex3 =CONCAT(‘000’,MaxIndex2);
WHEN 4 THEN
SET MaxIndex3 =CONCAT(‘0000’,MaxIndex2);
WHEN 5 THEN
SET MaxIndex3 =CONCAT(‘00000’,MaxIndex2);
WHEN 6 THEN
SET MaxIndex3 =CONCAT(‘000000’,MaxIndex2);
WHEN 7 THEN
SET MaxIndex3 =CONCAT(‘0000000’,MaxIndex2);
WHEN 8 THEN
SET MaxIndex3 =CONCAT(‘00000000’,MaxIndex2);
WHEN 9 THEN
SET MaxIndex3 =CONCAT(‘000000000’,MaxIndex2);
ELSE SET MaxIndex3 =CONCAT(‘-1’,MaxIndex2);
END CASE;
SELECT CONCAT(Prefix2,CurrentDate2,Infix2,MaxIndex3,Suffix2) INTO ReturnStr;
SELECT ReturnStr as ReturnStr;
END
可以这样修改,达梦具体语法可参考DM sql程序设计手册
CREATE PROCEDURE GetSequenceNumber(Code2 varchar(10), ReturnStr OUT varchar(50))
AS
DECLARE
Count int DEFAULT 1;
NewValue2 varchar(20);
CurrentDate2 varchar(8);
Prefix2 varchar(20);
DateType2 varchar(8);
Infix2 varchar(5);
Suffix2 varchar(5);
MaxIndex2 int;
IndexLength2 tinyint;
MaxDate2 varchar(8);
len2 varchar(8);
MaxIndex3 varchar(255);
BEGIN
SELECT Prefix,Infix,Suffix,DateType,MaxDate,MaxIndex,IndexLength
INTO Prefix2,Infix2,Suffix2,DateType2,MaxDate2,MaxIndex2,IndexLength2
FROM SequenceNumber WHERE Code=Code2 FOR UPDATE;
SET CurrentDate2= SUBSTRING(date_format(now(),‘%Y%m%d’),
CASE SubString(DateType2, 1, 4)
WHEN ‘yyyy’ THEN 1
WHEN ‘yyy’ THEN 2
ELSE 3
END, LENGTH(DateType2));
IF (CurrentDate2 = MaxDate2) THEN
SET MaxIndex2 = MaxIndex2 + Count;
ELSE
SET MaxIndex2 = Count;
END IF;
IF(MaxIndex2 >= POWER(10, IndexLength2)) THEN
SET IndexLength2 = IndexLength2 + 1;
END IF;
Update SequenceNumber SET MaxDate = CurrentDate2, MaxIndex=MaxIndex2 WHERE Code=Code2;
COMMIT;
SET len2 =(IndexLength2 - LENGTH(MaxIndex2));
CASE len2
WHEN 0 THEN
SET MaxIndex3 =MaxIndex2;
WHEN 1 THEN
SET MaxIndex3 =CONCAT(‘0’,MaxIndex2);
WHEN 2 THEN
SET MaxIndex3 =CONCAT(‘00’,MaxIndex2);
WHEN 3 THEN
SET MaxIndex3 =CONCAT(‘000’,MaxIndex2);
WHEN 4 THEN
SET MaxIndex3 =CONCAT(‘0000’,MaxIndex2);
WHEN 5 THEN
SET MaxIndex3 =CONCAT(‘00000’,MaxIndex2);
WHEN 6 THEN
SET MaxIndex3 =CONCAT(‘000000’,MaxIndex2);
WHEN 7 THEN
SET MaxIndex3 =CONCAT(‘0000000’,MaxIndex2);
WHEN 8 THEN
SET MaxIndex3 =CONCAT(‘00000000’,MaxIndex2);
WHEN 9 THEN
SET MaxIndex3 =CONCAT(‘000000000’,MaxIndex2);
ELSE SET MaxIndex3 =CONCAT(‘-1’,MaxIndex2);
END CASE;
SELECT CONCAT(Prefix2,CurrentDate2,Infix2,MaxIndex3,Suffix2) INTO ReturnStr;
SELECT ReturnStr as ReturnStr;
END