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

时间:2013-04-15 07:46:21

标签: java db2 substr

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

1 个答案:

答案 0 :(得分:1)

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

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS);
相关问题