2013-04-15 184 views
0

我收到以下錯誤試圖在DB2中創建一個存儲過程錯誤SQLCODE -138在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

如果這是關於DB2爲什麼它標記PostgreSQL的? –

+0

@CraigRinger抱歉,它現在已修復。 – Ruben

+0

謝謝。我只是困惑;有時候我們會讓人們假設用另一個數據庫名稱來標記某些東西是另一種說法:「另外,我該如何在其他數據庫中執行此操作?」。 –

回答

1

字符串位置是一個基礎,但要表示從0開始位置只需使用一個字符串:

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS); 
相關問題