2013-04-15 1 views
0

나는 다음과 같은 오류가 DB2에 저장 프로 시저를 만들려고 얻을오류 SQLCODE DB2에 트리거를 수행 -138

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 list, -138

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

내가 원하는 것은 "-"을 찾을 때 다른 문자열을 빼는 것입니다. 예를 들어, 코드는 "ART00001-A"이고 "ART00001"을 얻고 싶습니다.

저는 DB2 SQL 구문에 익숙하지 않으므로, 해당 코드에서 문제가 발생하면 미리 감사드립니다. DB2에서

+0

를이는 PostgreSQL의 태그 이유 DB2에 대한 경우를? –

+0

@CraigRinger 죄송합니다. 이제 해결되었습니다. – Ruben

+0

감사합니다. 나는 혼란 스러웠다. 때로는 다른 DB 이름으로 태그를 추가하는 것이 "이 다른 데이터베이스에서 어떻게 할 수 있습니까?"라고하는 대신에 태그하는 것으로 가정합니다. –

답변

1

문자열 위치는 1부터되지만 그냥 사용 위치 0에서 시작하는 문자열 표시됩니다

SET ARTICLECODE = SUBSTR(NROW.PROGRAMNAME, 1, POS); 
관련 문제