0

尝试在 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 语法方面的专家,所以如果您在该代码中发现问题,请提前致谢。

4

1 回答 1

2

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

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS);
于 2013-04-15T12:36:34.100 回答