簡體   English   中英

在DB2中執行觸發器時出現錯誤SQLCODE -138

[英]Error SQLCODE -138 when doing a trigger in DB2

我在嘗試在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中的字符串位置是基於一個的,但是您要指示一個從位置0開始的子字符串。只需使用:

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM