프로 시저가 끝날 때 값을 설정하려고하면 정의되지 않은 이름으로 OUT 매개 변수 ID에 대해 오류가 발생합니다. 그것을 주석 처리하면 절차가 잘 실행됩니다. 내가 뭘 잘못하고 있니?OUT 매개 변수 DB2 저장 프로 시저
CREATE PROCEDURE P3.CUST_CRT(IN NAME VARCHAR(15),
IN GENDER CHAR(1),
IN AGE INTEGER,
IN PIN INTEGER,
OUT ID INTEGER)
LANGUAGE SQL
P1: BEGIN
--Check if Customer NAME is NULL.
IF NAME IS NULL THEN
SIGNAL SQLSTATE VALUE '20010'
SET MESSAGE_TEXT = 'No NAME.';
END IF;
--Check if Customer NAME is an empty string.
IF NAME = '' THEN
SIGNAL SQLSTATE VALUE '20020'
SET MESSAGE_TEXT = 'NAME cannot be an empty string.';
END IF;
--Check if Customer GENDER falls in either of the two acceptable categories.
IF GENDER NOT IN ('M','F') THEN
SIGNAL SQLSTATE VALUE '20030'
SET MESSAGE_TEXT = 'GENDER can either be M or F';
END IF;
--Check if Customer AGE is not null.
IF AGE IS NULL THEN
SIGNAL SQLSTATE VALUE '20040'
SET MESSAGE_TEXT = 'AGE cannot be NULL';
END IF;
--Check that AGE is not negative.
IF AGE < 0 THEN
SIGNAL SQLSTATE VALUE '20060'
SET MESSAGE_TEXT = 'AGE cannot be negative.';
END IF;
--Check that the Customer is an adult.
IF AGE < 18 THEN
SIGNAL SQLSTATE VALUE '20070'
SET MESSAGE_TEXT = 'You have to be over 18 years to have an account.';
END IF;
--Check that PIN is not null.
IF PIN IS NULL THEN
SIGNAL SQLSTATE VALUE '20080'
SET MESSAGE_TEXT = 'PIN cannot be empty.';
END IF;
--Pin cannot be less than zero.
IF PIN < 0 THEN
SIGNAL SQLSTATE VALUE '20090'
SET MESSAGE_TEXT = 'PIN cannot be less than 0.';
END IF;
INSERT INTO P3.CUSTOMER(Name, Gender, Age, Pin) VALUES(NAME, GENDER, AGE, P3.ENCRYPT(PIN));
SET ID = ID.CURRVAL;
END P1 @
Windows 8.1 시스템에서 db2 express c 32 비트를 사용하고 있습니다. DB2ADMIN은 기본 스키마의 이름입니다. 코드를 실행중인 스키마는 P3입니다. 이것은 내가 받고있는 오류입니다 : [Code : -204, SQL State : 42704] "DB2ADMIN.ID"는 정의되지 않은 이름입니다. SQLCODE = -204, SQLSTATE = 42704, DRIVER = 4.22.29. – TheMokuaBrand
이쪽으로? ID P3.ID.CURRVAL을 P3.CUSTOMER에서 ID로 선택하십시오. 불행히도 여전히 DB2ADMIN.ID 대신 P3.ID와 동일한 오류가 발생합니다. 명시 적으로 INSERT에서 시퀀스를 사용하지 않는다는 사실이 문제가 될 수 있습니까? 난 그냥 프로 시저가 마지막 삽입의 기본 키 (ID)를 반환 싶어요. – TheMokuaBrand