プロシージャの最後に値を設定しようとすると、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 Expressマシンでdb2 express c 32ビットを使用しています。 DB2ADMINは、デフォルト・スキーマの名前です。コードを実行しているスキーマはP3です。これは私が取得しているエラーです:[コード:-204、SQLの状態:42704] "DB2ADMIN.ID"は未定義の名前です.. SQLCODE = -204、SQLSTATE = 42704、DRIVER = 4.22.29。 – TheMokuaBrand
この方法ですか? P3.ID.CURRVALをIDからP3.CUSTOMERに選択します。残念ながら、DB2ADMIN.IDではなくP3.IDで同じエラーが発生しています。私がINSERTで明示的にシーケンスを使用していないという事実は問題でしょうか?私は、プロシージャの最後の挿入の主キー(ID)を返すようにします。 – TheMokuaBrand