在 DB2 中执行触发器时出现错误 SQLCODE -138

问题描述 投票:0回答:1

尝试在 DB2 中创建存储过程时出现以下错误

Error report:
DB2 SQL error: SQLCODE: -138, SQLSTATE: 22011, SQLERRMC: null

我的触发器如下:

CREATE TRIGGER INSERT_SERIALNUMBER
AFTER INSERT ON LASERM
REFERENCING NEW ROW AS NROW
FOR EACH ROW MODE DB2SQL
BEGIN
DECLARE ARTICLECODE CHAR(30); 
DECLARE POS INT;
SET POS = LOCATE('-', NROW.PROGRAMNAME);

IF POS > 0 THEN
  SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 0, POS);
ELSE
  SET ARTICLECODE = NROW.PROGRAMNAME;
END IF;
CALL SP_INSERT_SERIALNUMBER(ARTICLECODE, NROW.PCBCODE);
END

根据 DB2 SQLCodes 列表,-138

-138 THE SECOND OR THIRD ARGUMENT OF THE SUBSTR OR SUBSTRING FUNCTION IS OUT OF RANGE

我想要做的是当找到“-”时从另一个字符串中减去一个字符串。例如,代码是“ART00001-A”,我只想得到“ART00001”。

我不是 DB2 SQL 语法方面的专家,所以如果您在该代码中发现问题,请提前致谢。

db2 substr
1个回答
2
投票

DB2 中的字符串位置是从 1 开始的,但您指示的是从位置 0 开始的子字符串。只需使用:

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS);
© www.soinside.com 2019 - 2024. All rights reserved.